欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > feign整合oauth2 使用笔记

feign整合oauth2 使用笔记

2025/4/20 4:55:25 来源:https://blog.csdn.net/yichengjie_c/article/details/140643163  浏览:    关键词:feign整合oauth2 使用笔记
  1. 编写配置类

    @Slf4j
    public class OAuth2FeignConfiguration {@Value("${auth.server.access-token-uri}")private String accessTokenUri;@Value("${auth.server.client-id}")private String clientId;@Value("${auth.server.client-secret}")private String clientSecret;@Value("${auth.server.host}")private String host;public OAuth2ClientContext oAuth2ClientContext = new DefaultOAuth2ClientContext();@Beanpublic ErrorDecoder errorDecoder() {return (methodKey, response) -> {if (response.status() == HttpStatus.UNAUTHORIZED.value()) {oAuth2ClientContext.setAccessToken(null);throw new RetryableException(response.status(), "access_token expire, retry", response.request().httpMethod(), new Date());}String message = response.reason();try {message = IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8);} catch (IOException e) {log.error("error decode error: {}", e);}return new RuntimeException("[" + methodKey + "], status: " + response.status() + ", message: " + message);};}@Beanpublic Retryer feignRetryer() {return new Retryer.Default(100, SECONDS.toMillis(1), 2);}@BeanRequestInterceptor oauth2FeignRequestInterceptor() {return new OAuth2FeignInterceptor(oAuth2ClientContext, resource(), host);}private ClientCredentialsResourceDetails resource() {ClientCredentialsResourceDetails resource = new ClientCredentialsResourceDetails();resource.setAccessTokenUri(accessTokenUri);resource.setClientId(clientId);resource.setClientSecret(clientSecret);return resource;}
    }
    
  2. 自定义:OAuth2FeignRequestInterceptor

    @Slf4j
    class OAuth2FeignInterceptor extends OAuth2FeignRequestInterceptor {private final String target;public OAuth2FeignInterceptor(OAuth2ClientContext oAuth2ClientContext, OAuth2ProtectedResourceDetails resource, String target) {super(oAuth2ClientContext, resource);this.target = target;}@Overridepublic void apply(RequestTemplate template) {if (StringUtils.isNotEmpty(target)) {template.target(target);}super.apply(template);}
    }
    
  3. 编写测试类

    @FeignClient(name = "hello-service", configuration = OAuth2FeignConfiguration.class
    )
    public interface HelloFeignClient {@GetMapping("/hello/index/{userId}")UserInfo index(@PathVariable("userId") String userId);
    }
    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词