|
|
@ -128,14 +128,30 @@ public class SecurityConfig { |
|
|
*/ |
|
|
*/ |
|
|
@Bean |
|
|
@Bean |
|
|
public CorsConfigurationSource corsConfigurationSource() { |
|
|
public CorsConfigurationSource corsConfigurationSource() { |
|
|
CorsConfiguration config = new CorsConfiguration(); |
|
|
|
|
|
config.setAllowedOriginPatterns(allowedOrigins); |
|
|
|
|
|
config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); |
|
|
|
|
|
config.setAllowedHeaders(List.of("*")); |
|
|
|
|
|
config.setExposedHeaders(List.of("*")); |
|
|
|
|
|
config.setAllowCredentials(true); |
|
|
|
|
|
|
|
|
// SDK 第三方接入接口:开放跨域(第三方域名动态未知,使用 Bearer Token 鉴权,无 refresh cookie 暴露风险) |
|
|
|
|
|
CorsConfiguration sdkConfig = new CorsConfiguration(); |
|
|
|
|
|
sdkConfig.setAllowedOriginPatterns(List.of("*")); |
|
|
|
|
|
sdkConfig.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); |
|
|
|
|
|
sdkConfig.setAllowedHeaders(List.of("*")); |
|
|
|
|
|
sdkConfig.setExposedHeaders(List.of("*")); |
|
|
|
|
|
sdkConfig.setAllowCredentials(true); |
|
|
|
|
|
|
|
|
|
|
|
// 管理后台接口:来源白名单(保护 httpOnly refresh cookie,防跨域 CSRF) |
|
|
|
|
|
CorsConfiguration adminConfig = new CorsConfiguration(); |
|
|
|
|
|
adminConfig.setAllowedOriginPatterns(allowedOrigins); |
|
|
|
|
|
adminConfig.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); |
|
|
|
|
|
adminConfig.setAllowedHeaders(List.of("*")); |
|
|
|
|
|
adminConfig.setExposedHeaders(List.of("*")); |
|
|
|
|
|
adminConfig.setAllowCredentials(true); |
|
|
|
|
|
|
|
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); |
|
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); |
|
|
source.registerCorsConfiguration("/**", config); |
|
|
|
|
|
|
|
|
// 先注册精确的 SDK 路径,再注册兜底的 /**,保证 SDK 接口优先命中开放配置 |
|
|
|
|
|
source.registerCorsConfiguration("/ai/**", sdkConfig); |
|
|
|
|
|
source.registerCorsConfiguration("/category/tree", sdkConfig); |
|
|
|
|
|
source.registerCorsConfiguration("/category/list", sdkConfig); |
|
|
|
|
|
source.registerCorsConfiguration("/feedback", sdkConfig); |
|
|
|
|
|
source.registerCorsConfiguration("/attachment/upload", sdkConfig); |
|
|
|
|
|
source.registerCorsConfiguration("/**", adminConfig); |
|
|
return source; |
|
|
return source; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |