提交 7ade9642 编写于 作者: 杨戬

添加feign拦截器,适配无网络隔离时token的传递

上级 4df9ae64
......@@ -28,5 +28,10 @@
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
package com.central.common.ribbon.annotation;
import com.central.common.ribbon.config.FeignInterceptorConfig;
import org.springframework.context.annotation.Import;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 在启动类上添加该注解来----开启自动登录用户对象注入
* Token转化SysUser
*
* @author zlt
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(FeignInterceptorConfig.class)
public @interface EnableFeignInterceptor {
}
package com.central.common.ribbon.config;
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
/**
* feign拦截器
*
* @author zlt
*/
public class FeignInterceptorConfig {
/**
* 使用feign client访问别的微服务时,将access_token放入参数或者header ,Authorization:Bearer xxx
* 或者url?access_token=xxx
*/
@Bean
public RequestInterceptor requestInterceptor() {
RequestInterceptor requestInterceptor = template -> {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
if (authentication instanceof OAuth2Authentication) {
OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails();
String access_token = details.getTokenValue();
template.header("Authorization", OAuth2AccessToken.BEARER_TYPE + " " + access_token);
}
}
};
return requestInterceptor;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册