WebMvcConfigurer は SpringMVC フレームワークによって提供される構成インターフェイスであり、これを通じてインターセプター、メッセージコンバーター、静的リソース処理などの SpringMVC の基礎となる動作を変更できます。これに基づいて、WebMvcConfigurer を使用してクロスオリジン リソース共有 (CORS) 構成を実装することもできます。
1. クロスドメインのリソース共有
いわゆるクロスドメイン リソース共有とは、あるドメイン名の下にある Web ページが別のドメイン名の下にあるリソースを要求することを意味し、この要求はクロスドメイン リクエストです。ブラウザではクロスオリジンリクエストが禁止されているため、この問題を解決するにはいくつかの方法が必要です。CORS の使用は、最も一般的な方法の 1 つです。
2. WebMvcConfigurer を使用して CORS を構成する
WebMvcConfigurer は、CORS 構成を実装するための addCorsMappings メソッドを提供します。簡単な例を次に示します。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
}
上記のコードは、すべてのルートがクロスドメイン リクエストを実行できるように構成します。allowedOrigins メソッドは、リクエストを許可するドメイン名を指定する String 配列を受け入れます。「*」が渡される場合、すべてのドメイン名に対してリクエストが許可されることを意味します。
3. CORSの詳細設定
- 許可されるリクエスト メソッド
デフォルトでは、CORS は GET、POST、および HEAD リクエストのみを許可します。他のタイプのリクエストを許可する必要がある場合は、 allowedMethods メソッドを使用できます。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
}
}
上記のコードは、/api パスにあるすべてのリクエストをクロスドメインリクエストにできるように構成し、許可されるメソッドには GET、POST、PUT、DELETE、および OPTIONS が含まれます。
- 許可される要求ヘッダー
デフォルトでは、CORS は Content-Type、Accept、Authorization などの一部の基本的な要求ヘッダーの送信のみを許可します。リクエストヘッダーをカスタマイズする必要がある場合は、 allowedHeaders メソッドを使用する必要があります。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("Authorization", "Content-Type", "Accept")
}
}
上記のコードは、Authorization、Content-Type、Accept など、送信が許可されるカスタム リクエスト ヘッダーを構成します。
- 公開された応答ヘッダー ブラウザー
は、ユーザーのセキュリティを確保するために、要求ヘッダーに加えて、Set-Cookie や Authorization などの一部の応答ヘッダーもフィルターで除外します。特定の応答ヘッダーをクライアントに公開する必要がある場合は、exhibitedHeaders メソッドを使用する必要があります。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("Authorization", "Content-Type", "Accept")
.exposedHeaders("Authorization")
}
}
上記のコードは、Authorization 応答ヘッダーをクライアントに公開するように構成されています。ExposuresHeaders が指定されていない場合、デフォルトでは応答ヘッダーはクライアントに公開されません。
4. まとめ
WebMvcConfigurer を介してクロスドメインを構成すると、SpringMVC アプリケーションに CORS を簡単に構成できます。実際の開発では、データのセキュリティを確保するために、実際の状況に応じて柔軟に構成する必要があります。