diff --git a/zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml b/zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml index e2c7dd9e615355f77a9699a2aa3ff85c9516a352..9bcc201acbad691b26c7950ca619cd52463bb10d 100644 --- a/zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml +++ b/zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml @@ -28,5 +28,10 @@ org.apache.httpcomponents httpclient + + org.springframework.cloud + spring-cloud-starter-oauth2 + true + diff --git a/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableFeignInterceptor.java b/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableFeignInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..bbbe6f54b56d6fb661cc9c56c75895bb30723dc2 --- /dev/null +++ b/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableFeignInterceptor.java @@ -0,0 +1,22 @@ +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 { + +} diff --git a/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java b/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..9b0911f6c3a671fe364d0337f421fb62d7f6e65f --- /dev/null +++ b/zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java @@ -0,0 +1,37 @@ +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; + } +}