From 16a57a8fc6868cea9171a1119698572407a2fc03 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期五, 28 八月 2026 15:21:46 +0800
Subject: [PATCH] fix0806: APP端去掉全部的市辖区选择

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/config/SaTokenWebConfig.java |   62 +++++++++++++++++-------------
 1 files changed, 35 insertions(+), 27 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/config/SaTokenWebConfig.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/config/SaTokenWebConfig.java
index 5903010..927f494 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/config/SaTokenWebConfig.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/config/SaTokenWebConfig.java
@@ -1,31 +1,32 @@
 package com.tcm.training.admin.config;
 
-import com.tcm.training.admin.app.auth.support.StpAppUserUtil;
 import cn.dev33.satoken.interceptor.SaInterceptor;
 import cn.dev33.satoken.context.SaHolder;
 import cn.dev33.satoken.stp.StpUtil;
 import com.tcm.training.admin.common.xss.XssParamInterceptor;
-import org.springframework.beans.factory.annotation.Value;
+import com.tcm.training.admin.upload.LocalUploadProperties;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import java.io.File;
+import java.util.Arrays;
 
 @Configuration
 public class SaTokenWebConfig implements WebMvcConfigurer {
 
     private final XssParamInterceptor xssParamInterceptor;
+    private final LocalUploadProperties localUploadProperties;
+    private final Environment environment;
 
-    @Value("${app.upload.dir:uploads}")
-    private String uploadDir;
-
-    @Value("${app.upload.path-prefix:/uploads}")
-    private String pathPrefix;
-
-    public SaTokenWebConfig(XssParamInterceptor xssParamInterceptor) {
+    public SaTokenWebConfig(XssParamInterceptor xssParamInterceptor,
+                            LocalUploadProperties localUploadProperties,
+                            Environment environment) {
         this.xssParamInterceptor = xssParamInterceptor;
+        this.localUploadProperties = localUploadProperties;
+        this.environment = environment;
     }
 
     /**
@@ -36,7 +37,7 @@
         registry.addInterceptor(new SaInterceptor(handle -> handleAuth()))
                 .addPathPatterns("/api/**", "/api/v1/**")
                 .excludePathPatterns(
-                        pathPrefix + "/**"
+                        localUploadProperties.getPathPrefix() + "/**"
                 );
 
         registry.addInterceptor(xssParamInterceptor)
@@ -52,10 +53,7 @@
         }
         String requestPath = SaHolder.getRequest().getRequestPath();
         if (isAppApi(requestPath)) {
-            if (isPublicAppApi(requestPath)) {
-                return;
-            }
-            StpAppUserUtil.checkLogin();
+            // APP 端允许游客访问,只有真正需要用户身份的接口才在业务层显式要求登录。
             return;
         }
         if (isPublicAdminApi(requestPath)) {
@@ -72,21 +70,31 @@
     }
 
     /**
-     * 判断当前 APP 路由是否允许匿名访问。
-     */
-    private boolean isPublicAppApi(String requestPath) {
-        return requestPath.startsWith("/api/app/auth/")
-                || requestPath.startsWith("/api/v1/app/auth/")
-                || "/api/app/version/check".equals(requestPath)
-                || "/api/v1/app/version/check".equals(requestPath);
-    }
-
-    /**
      * 判断当前后台路由是否允许匿名访问。
      */
     private boolean isPublicAdminApi(String requestPath) {
         return "/api/auth/login".equals(requestPath)
-                || "/api/auth/captcha".equals(requestPath);
+                || "/api/auth/captcha".equals(requestPath)
+                || (!isProdProfile() && isJpushManualPushApi(requestPath))
+                || requestPath.startsWith("/api/open/")
+                || requestPath.startsWith("/api/v1/open/");
+    }
+
+    /**
+     * 判断当前后台路由是否属于极光手动推送联调接口。
+     */
+    private boolean isJpushManualPushApi(String requestPath) {
+        return "/api/jpush/manual-push".equals(requestPath)
+                || "/api/v1/jpush/manual-push".equals(requestPath)
+                || requestPath.startsWith("/api/jpush/manual-push/")
+                || requestPath.startsWith("/api/v1/jpush/manual-push/");
+    }
+
+    /**
+     * 判断当前是否为生产环境,生产环境手动推送接口必须校验后台登录态。
+     */
+    private boolean isProdProfile() {
+        return Arrays.asList(environment.getActiveProfiles()).contains("prod");
     }
 
     /**
@@ -95,8 +103,8 @@
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         // 转为绝对路径,确保 file: 协议正确。
-        String absPath = new File(uploadDir).getAbsolutePath();
-        registry.addResourceHandler(pathPrefix + "/**")
+        String absPath = new File(localUploadProperties.getDir()).getAbsolutePath();
+        registry.addResourceHandler(localUploadProperties.getPathPrefix() + "/**")
                 .addResourceLocations("file:" + absPath + "/");
     }
 }

--
Gitblit v1.7.1