Deprecated methods when using Feign with Oauth2 in SpringBoot 2.4.3

Viewed 473

I am trying to use feign client with Oauth2 in my project based in Springboot 2.4.3. I implemented this example but the DefaultOAuth2ClientContext, OAuth2ProtectedResourceDetails and ClientCredentialsResourceDetails methods are deprecated.

pom.xml

<dependencies>
    ....
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-client</artifactId>
    </dependency>
    ....
</dependencies>

application.yml

config:
   serverUrl : exampleUrl
   clientId: exampleClientId
   clientSecret: exampleClientSecret
   scopes: exampleScopes

feign:
   post:
       name: postService
       url: https://localhost:8102/post
   get:
       name: getService
       url: https://localhost:8102/get

FeignClient.java

@FeignClient(name = "example", configuration = OAuth2ClientConfig.class)
public interface FeignClient {

    @PostMapping(value = "${feign.post.url}")
    HttpEntity search(@PathVariable String id);

    @GetMapping(value = "${feign.get.url}")
    HttpEntity upload(@PathVariable String id);
}

OAuth2ClientProperties.java

@ConfigurationProperties(prefix = "config")
public class OAuth2ClientProperties {

private String serverUrl;
private String clientId;
private String clientSecret;
private List<String> scopes = new ArrayList<>();

public String getAccessTokenUri() {
    return serverUrl;
}
public void setAccessTokenUri(String accessTokenUri) {
    this.serverUrl = accessTokenUri;
}
public String getClientId() {
    return clientId;
}
public void setClientId(String clientId) {
    this.clientId = clientId;
}
public String getClientSecret() {
    return clientSecret;
}
public void setClientSecret(String clientSecret) {
    this.clientSecret = clientSecret;
}
public List<String> getScopes() {
    return scopes;
}
public void setScopes(List<String> scopes) {
    this.scopes = scopes;
}
}

OAuth2ClientConfig.java

import feign.RequestInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails;

@Configuration
@EnableConfigurationProperties(OAuth2ClientProperties.class)
public class OAuth2ClientConfig {

@Autowired
private OAuth2ClientProperties oAuth2ClientProperties;

@Bean
public RequestInterceptor requestInterceptor() {
    return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), 
    oAuth2ProtectedResourceDetails());
}

private OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
    ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
    details.setClientId(oAuth2ClientProperties.getClientId());
    details.setClientSecret(oAuth2ClientProperties.getClientSecret());
    details.setAccessTokenUri(oAuth2ClientProperties.getAccessTokenUri());
    details.setScope(oAuth2ClientProperties.getScopes());
    return details;
}
}

I have not yet tested whether it works or not, but what bothers me is having deprecated methods and I have not found a solution to replace them with equivalents taken into account by the new version. Any ideas ?

0 Answers
Related