ホームページ >Java >&#&チュートリアル >Spring Security CORS フィルターが「Access-Control-Allow-Origin」ヘッダーを追加しないのはなぜですか?

Spring Security CORS フィルターが「Access-Control-Allow-Origin」ヘッダーを追加しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 13:26:30399ブラウズ

  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 を拡張し、許可されるオリジン、メソッド、およびヘッダーを定義する addCorsMappings メソッドを実装する WebConfig クラスを作成します:
<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。