diff --git a/src/main/java/com/yunhai/userbase/common/interceptor/ManageAccessInterceptor.java b/src/main/java/com/yunhai/userbase/common/interceptor/ManageAccessInterceptor.java index c75d1e2..7ebae2b 100644 --- a/src/main/java/com/yunhai/userbase/common/interceptor/ManageAccessInterceptor.java +++ b/src/main/java/com/yunhai/userbase/common/interceptor/ManageAccessInterceptor.java @@ -19,7 +19,7 @@ import java.util.List; * 白名单:GetUserInfo / GetUserScope / GetSysDict / RedirectTo(仅登录即可访问); * env-config(免登录,SPA 启动阶段在 CAS 登录前就要拉运行时配置,且内容为非敏感前端配置, * 端点由平台 yh-env-config-spring-boot-starter 提供,旁路过滤器见 EnvConfigSsoBypassFilter)。
- * 注册于 /{platform}/**(api/manage/mobiapi 三前缀均命中),排除 /oapi/**(服务间签名调用,行为不变)。
+ * 注册于 /api/**(显式前缀,路径闭集),排除 /oapi/**(服务间签名调用,行为不变)。
* SUPER/BUREAU/SCHOOL 之间的细粒度差异由各 Controller 内 guard 实现。 * * @author chenx @@ -29,17 +29,18 @@ import java.util.List; public class ManageAccessInterceptor implements HandlerInterceptor { /** - * 白名单(Ant 风格,* 匹配 platform 前缀): + * 白名单(显式 /api 前缀,路径闭集): * 登录后骨架所需的 4 个只读接口——用户信息、访问范围、系统字典、跳转代理; + * appearance 外观偏好读(仅登录即可读自身偏好,平台 yh-appearance-spring-boot-starter 端点); * env-config 免登录(端点与默认路径见平台 yh-env-config-spring-boot-starter)。 */ private static final List WHITELIST = Arrays.asList( - "/*/base/GetUserInfo", - "/*/base/GetUserScope", - "/*/base/GetSysDict", - "/*/base/RedirectTo/*", + "/api/base/GetUserInfo", + "/api/base/GetUserScope", + "/api/base/GetSysDict", + "/api/base/RedirectTo/*", "/api/appearance", - "/*/env-config"); + "/api/env-config"); private static final AntPathMatcher MATCHER = new AntPathMatcher(); diff --git a/src/main/java/com/yunhai/userbase/config/Config.java b/src/main/java/com/yunhai/userbase/config/Config.java index a4e3317..e686da4 100644 --- a/src/main/java/com/yunhai/userbase/config/Config.java +++ b/src/main/java/com/yunhai/userbase/config/Config.java @@ -13,9 +13,10 @@ public enum Config Inst; // 末尾不要带斜杠:各控制器用 API_PATH + "/xxx/" 拼路径,若这里带尾斜杠会变成 - // "/{platform}//xxx/" 这种字面双斜杠;Boot 2.6+ 默认 PathPatternParser 不合并连续斜杠, + // "/api//xxx/" 这种字面双斜杠;Boot 2.6+ 默认 PathPatternParser 不合并连续斜杠, // 会导致 /api/xxx 这类正常请求匹配不上而 404(旧 AntPathMatcher 会自动合并,故以前不报错)。 - public static final String API_PATH = "/{platform}"; // manage / api / mobiapi + public static final String API_PATH = "/api"; // PC 管理端(CAS 会话),路径闭集:/manage 等旧前缀随之 404 + public static final String MOBI_API_PATH = "/mobiapi"; // 移动端(平台 token;UserBase 自身不挂 mobiapi 控制器,仅供常量对齐) public static final String OPEN_API_PATH = "/oapi/"; public String getString(String key) diff --git a/src/main/java/com/yunhai/userbase/config/DWebMvcConfig.java b/src/main/java/com/yunhai/userbase/config/DWebMvcConfig.java index 9732d49..d21d711 100644 --- a/src/main/java/com/yunhai/userbase/config/DWebMvcConfig.java +++ b/src/main/java/com/yunhai/userbase/config/DWebMvcConfig.java @@ -38,11 +38,12 @@ public class DWebMvcConfig implements WebMvcConfigurer .addPathPatterns("/**") .excludePathPatterns("/login", "/logout", "/static/**", "/error", "/upload/**"); // 管理端统一防线:NONE 级 403(白名单见拦截器内)。 - // /{platform}/** 命中 api/manage/mobiapi 三前缀;显式排除 /oapi/**(服务间签名调用不受影响)。 + // 注册 /api/**(显式前缀,路径闭集:/manage、/{platform} 通配退役,旧前缀随之 404, + // 同时堵掉"任意前缀绕过白名单"的洞);显式排除 /oapi/**(服务间签名调用不受影响)。 // /actuator/**:健康探针与 prometheus 抓取无登录态(projman 部署健康检查依赖,误拦会触发回滚); // /v3/api-docs、/swagger-ui:接口文档工具链。 registry.addInterceptor(manageAccessInterceptor) - .addPathPatterns("/{platform}/**") + .addPathPatterns("/api/**") .excludePathPatterns("/oapi/**", "/login", "/logout", "/static/**", "/error", "/upload/**", "/actuator/**", "/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html", "/doc.html", "/webjars/**"); diff --git a/src/main/java/com/yunhai/userbase/controller/api/CacheRegistryController.java b/src/main/java/com/yunhai/userbase/controller/api/CacheRegistryController.java index f9599e8..9a74919 100644 --- a/src/main/java/com/yunhai/userbase/controller/api/CacheRegistryController.java +++ b/src/main/java/com/yunhai/userbase/controller/api/CacheRegistryController.java @@ -27,7 +27,7 @@ import java.util.TreeSet; /** * 缓存注册表对账接口(方案 C 的运行时可观测面)。

* - * {@code GET /{platform}/cache/registry} 输出三块内容:
+ * {@code GET /api/cache/registry} 输出三块内容:
*