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,6 +20,8 @@ public class SecurityProperties {
20 @NotEmpty(message = "Token Header 不能为空") 20 @NotEmpty(message = "Token Header 不能为空")
21 private String tokenHeader = "Authorization"; 21 private String tokenHeader = "Authorization";
22 22
  23 + private String jmTokenHeader = "X-Access-Token";
  24 +
23 /** 25 /**
24 * mock 模式的开关 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,6 +21,7 @@ import javax.servlet.ServletException;
21 import javax.servlet.http.HttpServletRequest; 21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletResponse; 22 import javax.servlet.http.HttpServletResponse;
23 import java.io.IOException; 23 import java.io.IOException;
  24 +import java.util.Optional;
24 25
25 /** 26 /**
26 * Token 过滤器,验证 token 的有效性 27 * Token 过滤器,验证 token 的有效性
@@ -62,6 +63,25 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { @@ -62,6 +63,25 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
62 return; 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 chain.doFilter(request, response); 87 chain.doFilter(request, response);
@@ -88,11 +108,11 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { @@ -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 * @param userType 用户类型 116 * @param userType 用户类型
97 * @return 模拟的 LoginUser 117 * @return 模拟的 LoginUser
98 */ 118 */