首頁  >  文章  >  Java  >  新增 Spring Security 後,為什麼我會收到「不存在「Access-Control-Allow-Origin」標頭」錯誤?

新增 Spring Security 後,為什麼我會收到「不存在「Access-Control-Allow-Origin」標頭」錯誤?

DDD
DDD原創
2024-10-31 01:43:29346瀏覽

Why Am I Getting a

Spring Security CORS 過濾器:排除「不存在'Access-Control-Allow-Origin'標頭」

說明

將Spring Security 新增至現有專案可能會在跨來源資源共用(CORS) 請求期間觸發「不存在'Access-Control-Allow-Origin'標頭」錯誤。出現此錯誤的原因是請求中未新增 Access-Control-Allow-Origin 回應標頭。

解決方案

方法 1:

更新您的程式碼以使用 Spring Security 的內建 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>

方法2:

如果您想更好地控制CORS 配置,請使用以下方法:

<code class="java">@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(ImmutableList.of("*"));
        configuration.setAllowedMethods(ImmutableList.of("HEAD",
                "GET", "POST", "PUT", "DELETE", "PATCH"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}</code>

附加說明:

  • 避免使用http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll( );或web.ignoring().antMatchers(HttpMethod.OPTIONS);,因為它們是不正確的解決方案。
  • 確保您的 CORS 過濾器位於過濾器鏈中 SecurityContextPersistenceFilter 之後和 LogoutFilter 之前。
  • 驗證 Access-Control-Allow-Methods 標頭是否包含必要的 HTTP 動詞:GET、PUT、POST 等。
  • 如果您仍然遇到 CORS 錯誤,請檢查應用程式日誌以取得任何可能有幫助的其他資訊來找出問題。

以上是新增 Spring Security 後,為什麼我會收到「不存在「Access-Control-Allow-Origin」標頭」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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