ホームページ >Java >&#&チュートリアル >Spring Security CORS フィルターが「Access-Control-Allow-Origin」ヘッダーを追加しないのはなぜですか?
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>
次の誤ったアプローチの使用を避けてください。
これらのメソッドは非推奨であり、不完全な CORS 実装を提供します。
以上がSpring Security CORS フィルターが「Access-Control-Allow-Origin」ヘッダーを追加しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。