Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zhangjian1949
microservices-platform
提交
fff77b82
microservices-platform
项目概览
zhangjian1949
/
microservices-platform
与 Fork 源项目一致
Fork自
zlt2000 / microservices-platform
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
microservices-platform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fff77b82
编写于
10月 26, 2019
作者:
zlt2000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
拆分feign拦截器适配webflux和http,修复sc-gateway开启url权限时租户的传递问题
上级
78954496
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
126 addition
and
74 deletion
+126
-74
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableBaseFeignInterceptor.java
.../common/ribbon/annotation/EnableBaseFeignInterceptor.java
+25
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableFeignInterceptor.java
...tral/common/ribbon/annotation/EnableFeignInterceptor.java
+3
-3
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignHttpInterceptorConfig.java
...tral/common/ribbon/config/FeignHttpInterceptorConfig.java
+91
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
.../central/common/ribbon/config/FeignInterceptorConfig.java
+3
-68
zlt-gateway/sc-gateway/src/main/java/com/central/SCGatewayApp.java
...ay/sc-gateway/src/main/java/com/central/SCGatewayApp.java
+2
-0
zlt-gateway/sc-gateway/src/main/java/com/central/gateway/filter/TraceFilter.java
...src/main/java/com/central/gateway/filter/TraceFilter.java
+0
-2
zlt-gateway/zuul-gateway/src/main/java/com/central/GatewayApp.java
...ay/zuul-gateway/src/main/java/com/central/GatewayApp.java
+2
-1
未找到文件。
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableBaseFeignInterceptor.java
0 → 100644
浏览文件 @
fff77b82
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
;
/**
* 开启feign拦截器传递数据给下游服务,只包含基础数据
*
* @author zlt
* @date 2019/10/26
* <p>
* Blog: https://blog.csdn.net/zlt2000
* Github: https://github.com/zlt2000
*/
@Target
(
ElementType
.
TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Import
(
FeignInterceptorConfig
.
class
)
public
@interface
EnableBaseFeignInterceptor
{
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/annotation/EnableFeignInterceptor.java
浏览文件 @
fff77b82
package
com.central.common.ribbon.annotation
;
import
com.central.common.ribbon.config.FeignHttpInterceptorConfig
;
import
com.central.common.ribbon.config.FeignInterceptorConfig
;
import
org.springframework.context.annotation.Import
;
...
...
@@ -9,14 +10,13 @@ import java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target
;
/**
* 在启动类上添加该注解来----开启自动登录用户对象注入
* Token转化SysUser
* 开启feign拦截器传递数据给下游服务,包含基础数据和http的相关数据
*
* @author zlt
*/
@Target
(
ElementType
.
TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Import
(
FeignInterceptorConfig
.
class
)
@Import
(
{
FeignInterceptorConfig
.
class
,
FeignHttpInterceptorConfig
.
class
}
)
public
@interface
EnableFeignInterceptor
{
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignHttpInterceptorConfig.java
0 → 100644
浏览文件 @
fff77b82
package
com.central.common.ribbon.config
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.SecurityConstants
;
import
feign.RequestInterceptor
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.annotation.PostConstruct
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
/**
* feign拦截器,只包含http相关数据
*
* @author zlt
* @date 2019/10/26
* <p>
* Blog: https://blog.csdn.net/zlt2000
* Github: https://github.com/zlt2000
*/
public
class
FeignHttpInterceptorConfig
{
protected
List
<
String
>
requestHeaders
=
new
ArrayList
<>();
@PostConstruct
public
void
initialize
()
{
requestHeaders
.
add
(
SecurityConstants
.
USER_ID_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
USER_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
ROLE_HEADER
);
requestHeaders
.
add
(
CommonConstant
.
Z_L_T_VERSION
);
}
/**
* 使用feign client访问别的微服务时,将上游传过来的access_token、username、roles等信息放入header传递给下一个服务
*/
@Bean
public
RequestInterceptor
httpFeignInterceptor
()
{
return
template
->
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
!=
null
)
{
HttpServletRequest
request
=
attributes
.
getRequest
();
Enumeration
<
String
>
headerNames
=
request
.
getHeaderNames
();
if
(
headerNames
!=
null
)
{
String
headerName
;
String
headerValue
;
while
(
headerNames
.
hasMoreElements
())
{
headerName
=
headerNames
.
nextElement
();
if
(
requestHeaders
.
contains
(
headerName
))
{
headerValue
=
request
.
getHeader
(
headerName
);
template
.
header
(
headerName
,
headerValue
);
}
}
}
//传递access_token,无网络隔离时需要传递
/*
String token = extractHeaderToken(request);
if (StrUtil.isEmpty(token)) {
token = request.getParameter(CommonConstant.ACCESS_TOKEN);
}
if (StrUtil.isNotEmpty(token)) {
template.header(CommonConstant.TOKEN_HEADER, CommonConstant.BEARER_TYPE + " " + token);
}
*/
}
};
}
/**
* 解析head中的token
* @param request
*/
private
String
extractHeaderToken
(
HttpServletRequest
request
)
{
Enumeration
<
String
>
headers
=
request
.
getHeaders
(
CommonConstant
.
TOKEN_HEADER
);
while
(
headers
.
hasMoreElements
())
{
String
value
=
headers
.
nextElement
();
if
((
value
.
toLowerCase
().
startsWith
(
CommonConstant
.
BEARER_TYPE
)))
{
String
authHeaderValue
=
value
.
substring
(
CommonConstant
.
BEARER_TYPE
.
length
()).
trim
();
int
commaIndex
=
authHeaderValue
.
indexOf
(
','
);
if
(
commaIndex
>
0
)
{
authHeaderValue
=
authHeaderValue
.
substring
(
0
,
commaIndex
);
}
return
authHeaderValue
;
}
}
return
null
;
}
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
浏览文件 @
fff77b82
...
...
@@ -7,64 +7,19 @@ import com.central.common.context.TenantContextHolder;
import
feign.RequestInterceptor
;
import
org.slf4j.MDC
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.annotation.PostConstruct
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
/**
* feign拦截器
* feign拦截器
,只包含基础数据
*
* @author zlt
*/
public
class
FeignInterceptorConfig
{
protected
List
<
String
>
requestHeaders
=
new
ArrayList
<>();
@PostConstruct
public
void
initialize
()
{
requestHeaders
.
add
(
SecurityConstants
.
USER_ID_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
USER_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
ROLE_HEADER
);
requestHeaders
.
add
(
CommonConstant
.
Z_L_T_VERSION
);
}
/**
* 使用feign client访问别的微服务时,将上游传过来的
access_token、username、roles、client
等信息放入header传递给下一个服务
* 使用feign client访问别的微服务时,将上游传过来的
client、traceid
等信息放入header传递给下一个服务
*/
@Bean
public
RequestInterceptor
request
Interceptor
()
{
public
RequestInterceptor
baseFeign
Interceptor
()
{
return
template
->
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
!=
null
)
{
HttpServletRequest
request
=
attributes
.
getRequest
();
Enumeration
<
String
>
headerNames
=
request
.
getHeaderNames
();
if
(
headerNames
!=
null
)
{
String
headerName
;
String
headerValue
;
while
(
headerNames
.
hasMoreElements
())
{
headerName
=
headerNames
.
nextElement
();
if
(
requestHeaders
.
contains
(
headerName
))
{
headerValue
=
request
.
getHeader
(
headerName
);
template
.
header
(
headerName
,
headerValue
);
}
}
}
//传递access_token,无网络隔离时需要传递
/*
String token = extractHeaderToken(request);
if (StrUtil.isEmpty(token)) {
token = request.getParameter(CommonConstant.ACCESS_TOKEN);
}
if (StrUtil.isNotEmpty(token)) {
template.header(CommonConstant.TOKEN_HEADER, CommonConstant.BEARER_TYPE + " " + token);
}
*/
}
//传递client
String
tenant
=
TenantContextHolder
.
getTenant
();
if
(
StrUtil
.
isNotEmpty
(
tenant
))
{
...
...
@@ -78,24 +33,4 @@ public class FeignInterceptorConfig {
}
};
}
/**
* 解析head中的token
* @param request
*/
private
String
extractHeaderToken
(
HttpServletRequest
request
)
{
Enumeration
<
String
>
headers
=
request
.
getHeaders
(
CommonConstant
.
TOKEN_HEADER
);
while
(
headers
.
hasMoreElements
())
{
String
value
=
headers
.
nextElement
();
if
((
value
.
toLowerCase
().
startsWith
(
CommonConstant
.
BEARER_TYPE
)))
{
String
authHeaderValue
=
value
.
substring
(
CommonConstant
.
BEARER_TYPE
.
length
()).
trim
();
int
commaIndex
=
authHeaderValue
.
indexOf
(
','
);
if
(
commaIndex
>
0
)
{
authHeaderValue
=
authHeaderValue
.
substring
(
0
,
commaIndex
);
}
return
authHeaderValue
;
}
}
return
null
;
}
}
zlt-gateway/sc-gateway/src/main/java/com/central/SCGatewayApp.java
浏览文件 @
fff77b82
package
com.central
;
import
com.central.common.ribbon.annotation.EnableBaseFeignInterceptor
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
...
...
@@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* Github: https://github.com/zlt2000
*/
@EnableFeignClients
@EnableBaseFeignInterceptor
@EnableDiscoveryClient
@SpringBootApplication
public
class
SCGatewayApp
{
...
...
zlt-gateway/sc-gateway/src/main/java/com/central/gateway/filter/TraceFilter.java
浏览文件 @
fff77b82
package
com.central.gateway.filter
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.util.IdUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.SecurityConstants
;
import
com.central.log.properties.TraceProperties
;
import
org.slf4j.MDC
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
zlt-gateway/zuul-gateway/src/main/java/com/central/GatewayApp.java
浏览文件 @
fff77b82
package
com.central
;
import
com.central.common.ribbon.annotation.EnableBaseFeignInterceptor
;
import
com.central.common.ribbon.annotation.EnableFeignInterceptor
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
...
...
@@ -12,7 +13,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
*/
@EnableZuulProxy
@EnableFeignClients
@EnableFeignInterceptor
@Enable
Base
FeignInterceptor
@EnableDiscoveryClient
@SpringBootApplication
public
class
GatewayApp
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录