소스 검색

fix: SaTokenConfigure 增加 @SaIgnore 注解检查,与 miniapp 模块保持一致

此前 admin 模块的 SaInterceptor 仅依赖路径排除,未检查 @SaIgnore 注解,
导致注解形同虚设。现改为与 miniapp 模块相同的模式:先检查方法/类上的
@SaIgnore 注解,有则跳过鉴权。

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 개월 전
부모
커밋
57f6487e90
1개의 변경된 파일12개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 1
      car-wash-admin/src/main/java/com/kym/admin/config/SaTokenConfigure.java

+ 12 - 1
car-wash-admin/src/main/java/com/kym/admin/config/SaTokenConfigure.java

@@ -1,8 +1,10 @@
 package com.kym.admin.config;
 
+import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.interceptor.SaInterceptor;
 import cn.dev33.satoken.stp.StpUtil;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@@ -17,7 +19,16 @@ public class SaTokenConfigure implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         // 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。
-        registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
+        registry.addInterceptor(new SaInterceptor(handler -> {
+                    // 检查 @SaIgnore 注解,有则跳过鉴权
+                    if (handler instanceof HandlerMethod hm) {
+                        if (hm.hasMethodAnnotation(SaIgnore.class)
+                                || hm.getBeanType().isAnnotationPresent(SaIgnore.class)) {
+                            return;
+                        }
+                    }
+                    StpUtil.checkLogin();
+                }))
                 .addPathPatterns("/**")
                 // login接口不鉴权
                 .excludePathPatterns(