|
@@ -15,8 +15,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
|
public class SaTokenConfig implements WebMvcConfigurer {
|
|
public class SaTokenConfig implements WebMvcConfigurer {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 注册 Sa-Token 全局过滤器,用于读取小程序的 access_token
|
|
|
|
|
- * 支持多种token传递方式,提高兼容性
|
|
|
|
|
|
|
+ * 注册 Sa-Token 全局过滤器
|
|
|
|
|
+ * Sa-Token 会根据配置自动从请求头读取 token
|
|
|
*/
|
|
*/
|
|
|
@Bean
|
|
@Bean
|
|
|
public SaServletFilter getSaServletFilter() {
|
|
public SaServletFilter getSaServletFilter() {
|
|
@@ -24,47 +24,20 @@ public class SaTokenConfig implements WebMvcConfigurer {
|
|
|
.addInclude("/**")
|
|
.addInclude("/**")
|
|
|
.addExclude("/login/**", "/health/**", "/callback/**")
|
|
.addExclude("/login/**", "/health/**", "/callback/**")
|
|
|
.setAuth(obj -> {
|
|
.setAuth(obj -> {
|
|
|
- // 多种方式获取token,提高兼容性
|
|
|
|
|
- String tokenValue = null;
|
|
|
|
|
-
|
|
|
|
|
- // 方式1: 从 access_token 请求头获取(小程序标准方式)
|
|
|
|
|
- tokenValue = SaHolder.getRequest().getHeader("access_token");
|
|
|
|
|
- if (isValidToken(tokenValue)) {
|
|
|
|
|
- log.info("[Sa-Token] 从 access_token 头读取到token: {}", maskToken(tokenValue));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 方式2: 从 Authorization 头获取(标准Bearer方式)
|
|
|
|
|
- if (!isValidToken(tokenValue)) {
|
|
|
|
|
- String authHeader = SaHolder.getRequest().getHeader("Authorization");
|
|
|
|
|
- if (authHeader != null && authHeader.startsWith("Bearer ")) {
|
|
|
|
|
- tokenValue = authHeader.substring(7);
|
|
|
|
|
- if (isValidToken(tokenValue)) {
|
|
|
|
|
- log.info("[Sa-Token] 从 Authorization 头读取到token: {}", maskToken(tokenValue));
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 方式3: 从请求参数获取(备用方式)
|
|
|
|
|
- if (!isValidToken(tokenValue)) {
|
|
|
|
|
- // 注意:SaRequest 可能不直接支持 getParameter,这里先注释掉
|
|
|
|
|
- // tokenValue = SaHolder.getRequest().getParameter("access_token");
|
|
|
|
|
- // if (isValidToken(tokenValue)) {
|
|
|
|
|
- // log.info("[Sa-Token] 从请求参数读取到token: {}", maskToken(tokenValue));
|
|
|
|
|
- // }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 如果获取到有效token,设置到上下文
|
|
|
|
|
- if (isValidToken(tokenValue)) {
|
|
|
|
|
- StpUtil.setTokenValue(tokenValue);
|
|
|
|
|
|
|
+ // Sa-Token 会根据配置自动从请求头读取 token
|
|
|
|
|
+ // 这里只需要执行登录校验即可
|
|
|
|
|
+ String tokenValue = StpUtil.getTokenValue();
|
|
|
|
|
+ if (tokenValue != null && !tokenValue.isEmpty()) {
|
|
|
|
|
+ log.info("[Sa-Token Filter] 读取到token: {}", maskToken(tokenValue));
|
|
|
} else {
|
|
} else {
|
|
|
- log.info("[Sa-Token] 未找到有效的token");
|
|
|
|
|
|
|
+ log.warn("[Sa-Token Filter] 未找到token");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 执行登录校验
|
|
// 执行登录校验
|
|
|
StpUtil.checkLogin();
|
|
StpUtil.checkLogin();
|
|
|
})
|
|
})
|
|
|
.setError(e -> {
|
|
.setError(e -> {
|
|
|
- log.warn("[Sa-Token] 认证失败: {}", e.getMessage());
|
|
|
|
|
|
|
+ log.warn("[Sa-Token Filter] 认证失败: {}", e.getMessage());
|
|
|
return e;
|
|
return e;
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|