Spring Security CORS 過濾器:排除401 錯誤
儘管在現有專案中實現了Spring Security,但您仍然會遇到401“No '來自您的伺服器的Access-Control-Allow-Origin' header”錯誤。出現這種情況是因為回應中沒有附加此類標頭。
為了解決此問題,您嘗試在登出過濾器之前將自訂過濾器新增至過濾器鏈中。但是,該過濾器似乎不適用於您的請求。讓我們檢查一下您現有的配置和潛在問題:
安全配置:
安全配置正在使用 CORS 配置,該配置已正確配置。但是,需要注意的是,控制器中的 @CrossOrigin 註解可能與此配置衝突,導致不可預測的行為。
過濾器實作:
您的過濾器似乎正確配置為 OncePerRequestFilter。它定義了過濾器操作的必要方法,包括向響應添加 CORS 標頭。
過濾器註冊:
您的過濾器正在透過 Spring Boot 註冊,已確認通過日誌條目。過濾器映射到“/*”,並且其在過濾器鏈中的位置合適。
產生的過濾器鏈:
產生的過濾器鏈輸出顯示您的 CORS清單中缺少過濾器。這可以解釋為什麼它沒有生效。
回應標頭:
您尚未提供從伺服器收到的完整回應標頭。檢查這些標頭可以深入了解響應中存在的實際 CORS 標頭。
編輯 1:
嘗試了 @Piotr Sołtysiak 建議的解決方案,但它也未能解決問題。產生的過濾器鏈中缺少 CORS 過濾器,並且 401 錯誤仍然存在。
解決方案:
在 Spring Security 4.1 及更高版本中,實現 CORS 支援已更改。首選方法是使用以下設定:
<code class="java">@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH"); } }</code>
<code class="java">@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors(); } @Bean public CorsConfigurationSource corsConfigurationSource() { // ... (Define the CORS configuration and return a UrlBasedCorsConfigurationSource) } }</code>
避免使用以下不正確的方法:
以上是為什麼我的 Spring Security CORS 過濾器未添加“Access-Control-Allow-Origin\”標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!