Commit 717dd1ab7c5665e2c814bb5e1808e7a129028b33

Authored by gaibu
1 parent 24f0e4dd

fix: 积木报表 API 数据集解析时 token 未正确解析的问题

yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/SecurityProperties.java
... ... @@ -20,6 +20,8 @@ public class SecurityProperties {
20 20 @NotEmpty(message = "Token Header 不能为空")
21 21 private String tokenHeader = "Authorization";
22 22  
  23 + private String jmTokenHeader = "X-Access-Token";
  24 +
23 25 /**
24 26 * mock 模式的开关
25 27 */
... ...
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/TokenAuthenticationFilter.java
... ... @@ -21,6 +21,7 @@ import javax.servlet.ServletException;
21 21 import javax.servlet.http.HttpServletRequest;
22 22 import javax.servlet.http.HttpServletResponse;
23 23 import java.io.IOException;
  24 +import java.util.Optional;
24 25  
25 26 /**
26 27 * Token 过滤器,验证 token 的有效性
... ... @@ -62,6 +63,25 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
62 63 return;
63 64 }
64 65 }
  66 + // 积木请求头
  67 + String jmTokenHeader = request.getHeader(securityProperties.getJmTokenHeader());
  68 + if (StrUtil.isNotEmpty(jmTokenHeader)) {
  69 + try {
  70 + OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(jmTokenHeader);
  71 + Optional<LoginUser> optUser = Optional.ofNullable(accessToken)
  72 + .map(
  73 + t -> new LoginUser().setId(t.getUserId())
  74 + .setUserType(t.getUserType())
  75 + .setTenantId(t.getTenantId())
  76 + .setScopes(t.getScopes())
  77 + );
  78 + if (optUser.isPresent()) {
  79 + SecurityFrameworkUtils.setLoginUser(optUser.get(), request);
  80 + }
  81 + } catch (ServiceException ignored) {
  82 + // do nothing:如果报错,说明认证失败,忽略即可
  83 + }
  84 + }
65 85  
66 86 // 继续过滤链
67 87 chain.doFilter(request, response);
... ... @@ -88,11 +108,11 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
88 108  
89 109 /**
90 110 * 模拟登录用户,方便日常开发调试
91   - *
  111 + * <p>
92 112 * 注意,在线上环境下,一定要关闭该功能!!!
93 113 *
94   - * @param request 请求
95   - * @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号
  114 + * @param request 请求
  115 + * @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号
96 116 * @param userType 用户类型
97 117 * @return 模拟的 LoginUser
98 118 */
... ...