Переглянути джерело

拦截器通过注解模式拦截

xgb 1 тиждень тому
батько
коміт
49d92995ae

+ 11 - 0
fs-admin/src/main/java/com/fs/admin/annotation/TenantDS.java

@@ -0,0 +1,11 @@
+package com.fs.admin.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TenantDS {
+}

+ 1 - 13
fs-admin/src/main/java/com/fs/admin/config/AdminWebMvcConfig.java

@@ -15,18 +15,6 @@ public class AdminWebMvcConfig implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(adminTenantDataSourceInterceptor)
-                .addPathPatterns(
-                        "/admin/callRecord/**",
-                        "/admin/voice-robotic/**",
-                        "/admin/sms-admin/**",
-                        "/admin/sms-order/**",
-                        "/admin/sms-package/**",
-                        "/admin/videoResource/**",
-                        "/admin/live/**",
-                        "/admin/liveVideo/**",
-                        "/admin/product/**",
-                        "/admin/storeOrder/**",
-                        "/admin/article/**"
-                );
+                .addPathPatterns("/admin/**");
     }
 }

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/CallRecordAdminController.java

@@ -1,6 +1,7 @@
 package com.fs.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fs.admin.annotation.TenantDS;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -21,6 +22,7 @@ import java.util.List;
  * 总后台外呼记录和质检控制器
  * 查看所有租户的外呼通话记录、录音和质检
  */
+@TenantDS
 @RestController
 @RequestMapping("/admin/callRecord")
 public class CallRecordAdminController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/AdminLiveVideoController.java

@@ -3,6 +3,7 @@ package com.fs.admin.controller.audit;
 import java.util.List;
 import java.util.Map;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminLiveVideoService;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.page.TableDataInfo;
@@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+@TenantDS
 @RestController
 @RequestMapping("/admin/liveVideo")
 public class AdminLiveVideoController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/AdminStoreOrderAdminController.java

@@ -2,6 +2,7 @@ package com.fs.admin.controller.audit;
 
 import java.util.*;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminStoreOrderService;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Log;
@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+@TenantDS
 @RestController
 @RequestMapping("/admin/storeOrder")
 public class AdminStoreOrderAdminController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/AdminVideoResourceController.java

@@ -2,6 +2,7 @@ package com.fs.admin.controller.audit;
 
 import java.util.List;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminVideoResourceService;
 import com.fs.admin.vo.AdminVideoResourceVO;
 import com.fs.common.core.controller.BaseController;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
  * 总后台视频资源审计控制器
  * 通过拦截器切库后查询当前租户 fs_user_course_video 数据
  */
+@TenantDS
 @RestController
 @RequestMapping("/admin/videoResource")
 public class AdminVideoResourceController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/AdminVoiceRoboticController.java

@@ -1,5 +1,6 @@
 package com.fs.admin.controller.audit;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -23,6 +24,7 @@ import java.util.List;
  * @createDate: 2026/5/27
  * @version: 1.0
  */
+@TenantDS
 @RestController
 @RequestMapping("/admin/voice-robotic")
 public class AdminVoiceRoboticController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/ArticleAdminController.java

@@ -2,6 +2,7 @@ package com.fs.admin.controller.audit;
 
 import java.util.*;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminArticleService;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Log;
@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+@TenantDS
 @RestController
 @RequestMapping("/admin/article")
 public class ArticleAdminController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/LiveAdminController.java

@@ -2,6 +2,7 @@ package com.fs.admin.controller.audit;
 
 import java.util.*;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminLiveService;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Log;
@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+@TenantDS
 @RestController
 @RequestMapping("/admin/live")
 public class LiveAdminController extends BaseController {

+ 2 - 0
fs-admin/src/main/java/com/fs/admin/controller/audit/ProductAdminController.java

@@ -2,6 +2,7 @@ package com.fs.admin.controller.audit;
 
 import java.util.*;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.admin.service.IAdminProductService;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Log;
@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+@TenantDS
 @RestController
 @RequestMapping("/admin/product")
 public class ProductAdminController extends BaseController {

+ 15 - 1
fs-admin/src/main/java/com/fs/admin/interceptor/AdminTenantDataSourceInterceptor.java

@@ -1,5 +1,6 @@
 package com.fs.admin.interceptor;
 
+import com.fs.admin.annotation.TenantDS;
 import com.fs.common.config.RedisTenantContext;
 import com.fs.common.enums.DataSourceType;
 import com.fs.framework.datasource.DynamicDataSourceContextHolder;
@@ -11,11 +12,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
+import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerMapping;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
 import java.util.Map;
 
 /**
@@ -45,17 +48,28 @@ public class AdminTenantDataSourceInterceptor extends HandlerInterceptorAdapter
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        if (!(handler instanceof HandlerMethod)) {
+            return true;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        Method method = handlerMethod.getMethod();
+        if (!method.getDeclaringClass().isAnnotationPresent(TenantDS.class)
+                && !method.isAnnotationPresent(TenantDS.class)) {
+            return true;
+        }
 
         String tenantIdStr = request.getParameter("tenantId");
         if (!StringUtils.hasText(tenantIdStr)) {
             tenantIdStr = request.getHeader(HEADER_TENANT_ID);
         }
         if (!StringUtils.hasText(tenantIdStr)) {
-            // 获取路由上的 tenantId
             Map<String, String> pathVars = (Map<String, String>) request.getAttribute(
                     HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
             if (pathVars != null) {
                 tenantIdStr = pathVars.get("tenantId");
+                if (!StringUtils.hasText(tenantIdStr)) {
+                    tenantIdStr = pathVars.get("companyId");
+                }
             }
         }
         if (!StringUtils.hasText(tenantIdStr)) {