Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
380ef717
提交
380ef717
authored
12月 30, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1. 修复 token 过期时,网关继续网关
2. 修复 swagger 重复带了前缀 3. 修复 bpm 模块的 security 配置错误
上级
31bbcecb
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
59 行增加
和
2 行删除
+59
-2
TokenAuthenticationFilter.java
...ao/gateway/filter/security/TokenAuthenticationFilter.java
+15
-2
application.yaml
yudao-gateway/src/main/resources/application.yaml
+2
-0
SecurityConfiguration.java
.../bpm/framework/security/config/SecurityConfiguration.java
+38
-0
package-info.java
...udao/module/bpm/framework/security/core/package-info.java
+4
-0
没有找到文件。
yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java
浏览文件 @
380ef717
...
@@ -16,12 +16,14 @@ import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalance
...
@@ -16,12 +16,14 @@ import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalance
import
org.springframework.cloud.gateway.filter.GatewayFilterChain
;
import
org.springframework.cloud.gateway.filter.GatewayFilterChain
;
import
org.springframework.cloud.gateway.filter.GlobalFilter
;
import
org.springframework.cloud.gateway.filter.GlobalFilter
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.Ordered
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
org.springframework.web.server.ServerWebExchange
;
import
org.springframework.web.server.ServerWebExchange
;
import
reactor.core.publisher.Mono
;
import
reactor.core.publisher.Mono
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.util.Objects
;
import
java.util.function.Function
;
import
java.util.function.Function
;
/**
/**
...
@@ -43,7 +45,9 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
...
@@ -43,7 +45,9 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
/**
/**
* 空的 LoginUser 的结果
* 空的 LoginUser 的结果
*
*
* TODO 芋艿:用于解决 getLoginUser 返回 Mono.empty() 的时候,会导致后续的 flatMap 无法进行处理的问题。先暂时这么解决,寻找更优解 ing
* 用于解决如下问题:
* 1. {@link #getLoginUser(ServerWebExchange, String)} 返回 Mono.empty() 时,会导致后续的 flatMap 无法进行处理的问题。
* 2. {@link #buildUser(String)} 时,如果 Token 已经过期,返回 LOGIN_USER_EMPTY 对象,避免缓存无法刷新
*/
*/
private
static
final
LoginUser
LOGIN_USER_EMPTY
=
new
LoginUser
();
private
static
final
LoginUser
LOGIN_USER_EMPTY
=
new
LoginUser
();
...
@@ -131,10 +135,19 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
...
@@ -131,10 +135,19 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
}
}
private
LoginUser
buildUser
(
String
body
)
{
private
LoginUser
buildUser
(
String
body
)
{
// 处理结果,结果不正确
CommonResult
<
OAuth2AccessTokenCheckRespDTO
>
result
=
JsonUtils
.
parseObject
(
body
,
CHECK_RESULT_TYPE_REFERENCE
);
CommonResult
<
OAuth2AccessTokenCheckRespDTO
>
result
=
JsonUtils
.
parseObject
(
body
,
CHECK_RESULT_TYPE_REFERENCE
);
if
(
result
==
null
||
result
.
isError
()
)
{
if
(
result
==
null
)
{
return
null
;
return
null
;
}
}
if
(
result
.
isError
())
{
// 特殊情况:令牌已经过期(code = 401),需要返回 LOGIN_USER_EMPTY,避免 Token 一直因为缓存,被误判为有效
if
(
Objects
.
equals
(
result
.
getCode
(),
HttpStatus
.
UNAUTHORIZED
.
value
()))
{
return
LOGIN_USER_EMPTY
;
}
return
null
;
}
// 创建登录用户
// 创建登录用户
OAuth2AccessTokenCheckRespDTO
tokenInfo
=
result
.
getData
();
OAuth2AccessTokenCheckRespDTO
tokenInfo
=
result
.
getData
();
return
new
LoginUser
().
setId
(
tokenInfo
.
getUserId
()).
setUserType
(
tokenInfo
.
getUserType
())
return
new
LoginUser
().
setId
(
tokenInfo
.
getUserId
()).
setUserType
(
tokenInfo
.
getUserType
())
...
...
yudao-gateway/src/main/resources/application.yaml
浏览文件 @
380ef717
...
@@ -37,3 +37,5 @@ spring:
...
@@ -37,3 +37,5 @@ spring:
-
Path=/admin-api/bpm/**
-
Path=/admin-api/bpm/**
filters
:
filters
:
-
RewritePath=/admin-api/bpm/v2/api-docs, /v2/api-docs
-
RewritePath=/admin-api/bpm/v2/api-docs, /v2/api-docs
x-forwarded
:
prefix-enabled
:
false
# 避免 Swagger 重复带上额外的 /admin-api/system 前缀
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/security/config/SecurityConfiguration.java
0 → 100644
浏览文件 @
380ef717
package
cn
.
iocoder
.
yudao
.
module
.
bpm
.
framework
.
security
.
config
;
import
cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer
;
import
cn.iocoder.yudao.module.system.enums.ApiConstants
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer
;
/**
* System 模块的 Security 配置
*/
@Configuration
(
proxyBeanMethods
=
false
,
value
=
"systemSecurityConfiguration"
)
public
class
SecurityConfiguration
{
@Bean
(
"systemAuthorizeRequestsCustomizer"
)
public
AuthorizeRequestsCustomizer
authorizeRequestsCustomizer
()
{
return
new
AuthorizeRequestsCustomizer
()
{
@Override
public
void
customize
(
ExpressionUrlAuthorizationConfigurer
<
HttpSecurity
>.
ExpressionInterceptUrlRegistry
registry
)
{
// TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案
// Swagger 接口文档
registry
.
antMatchers
(
"/swagger-ui.html"
).
anonymous
()
.
antMatchers
(
"/swagger-resources/**"
).
anonymous
()
.
antMatchers
(
"/webjars/**"
).
anonymous
()
.
antMatchers
(
"/*/api-docs"
).
anonymous
();
// Spring Boot Actuator 的安全配置
registry
.
antMatchers
(
"/actuator"
).
anonymous
()
.
antMatchers
(
"/actuator/**"
).
anonymous
();
// RPC 服务的安全配置
registry
.
antMatchers
(
ApiConstants
.
PREFIX
+
"/**"
).
permitAll
();
}
};
}
}
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/security/core/package-info.java
0 → 100644
浏览文件 @
380ef717
/**
* 占位
*/
package
cn
.
iocoder
.
yudao
.
module
.
bpm
.
framework
.
security
.
core
;
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论