首先看一下原始代碼:
@Bean
public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://47.99.63.22/vue"); corsConfiguration.addAllowedOrigin("http://47.99.63.22/lab");corsConfiguration.addAllowedOrigin("http://47.99.63.22:8096/schedule/all"); corsConfiguration.addAllowedOrigin("http://47.99.63.22:8096/*"); corsConfiguration.addAllowedOrigin("http://localhost:5173"); corsConfiguration.addAllowedOrigin("http://localhost:5174"); corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration); UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();corsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);return new CorsFilter(source);
}
可能存在以下問題:
1、不正確的allowedOrigins配置
addAllowedOrigin方法應該只包含協議、域名和端口。您不能在這里指定路徑(如`/lab`或`/schedule/all`)。正確的做法是只指定到端口號,例如 `http://47.99.63.22:8096`。如果您的前端服務器運行在不同的端口上,則只需指定協議和域名(沒有路徑或通配符):
2、精確的源而不是通配符
?在配置CORS時,如果`setAllowCredentials`被設置為`true`(意味著你希望支持憑證),則不能使用通配符`*`來設置`allowedOrigins`。憑證包括cookies以及HTTP認證的相關信息。通配符與允許憑證的請求不兼容。?
3、注冊的順序和實例化
您似乎創建了兩個UrlBasedCorsConfigurationSource實例,但只有`source`被用于創建`CorsFilter`。請確保您使用了正確的實例化對象。在這段代碼中,`corsConfigurationSource` 實例是沒必要的。?
修正上述問題后的示例代碼可能如下所示:
@Bean
public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://47.99.63.22"); // 注意這里去掉了路徑和通配符corsConfiguration.addAllowedOrigin("http://localhost:5173");corsConfiguration.addAllowedOrigin("http://localhost:5174");corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);
}
?確保增加MAX_AGE的定義(如果尚未定義),它應該是一個時間長的長整數值,例如:
private static final long MAX_AGE = 24 * 60 * 60;
這里主要的問題在于,addAllowedOrigin方法應該只包含協議、域名和端口,不能指定路徑。