首頁  >  文章  >  Java  >  為什麼我的 Spring Security CORS 過濾器未添加“Access-Control-Allow-Origin\”標頭?

為什麼我的 Spring Security CORS 過濾器未添加“Access-Control-Allow-Origin\”標頭?

Linda Hamilton
Linda Hamilton原創
2024-11-03 13:26:30336瀏覽

  Why is My Spring Security CORS Filter Not Adding the 'Access-Control-Allow-Origin' Header?

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 支援已更改。首選方法是使用以下設定:

  • 建立一個擴充WebMvcConfigurerAdapter 的WebConfig 類別並實作addCorsMappings 方法來定義允許的來源、方法和標頭:
<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>
  • 在您的SecurityConfig 類中,啟用CORS 並定義自定義CorsConfigurationSource:
<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>

避免使用以下不正確的方法:

  • http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
  • web.ignoring().antMatchers(HttpMethod.OPTIONS);

這些方法已被棄用,並且提供不完整的CORS 實作。

以上是為什麼我的 Spring Security CORS 過濾器未添加“Access-Control-Allow-Origin\”標頭?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn