1.フィルターに基づくCORSサポート(Spring Bootプロジェクト)
SpringフレームワークはCorsFilterも提供します。この場合は、@CrossOrigin
またはを使用しないWebMvcConfigurer#addCorsMappings(CorsRegistry)
でください。たとえば、Spring Bootアプリケーションで次のフィルターを宣言できます。
package com.card.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* 跨域访问控制
*/
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许任何域名使用
corsConfiguration.addAllowedOrigin("*");
// 允许任何头
corsConfiguration.addAllowedHeader("*");
// 允许任何方法(post、get等)
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
2、Nginxの方法
1. Nginxをダウンロード(1.18.0推奨)
https://nginx.org/en/download.html
2. Nginxの設定、編集 nginx-1.18.0\conf\nginx.conf
デフォルトのサーバー構成をコメント化する
server{
listen 80;
server_name localhost;
location /{
proxy_pass http://192.168.0.76:8005/;
}
location /ssns-serve{
proxy_pass http://localhost:8080;
}
}
上記のコードはとしてlocalhost:80
転送することを意味します。つまり192.168.0.76:8005
、訪問はlocalhost:80
実際には訪問192.168.0.76:8005
であり、訪問localhost:80/ssns-serve
は訪問localhost:8080
でありssns-serve
、URLで始まります
3.クロスドメイン(CORS)サポート:
Spring Framework 4.2 GAはCORSに一流のサポートを提供し、通常のフィルターベースのソリューションよりも簡単かつ強力に構成できます。したがって、@ CrossOriginをサポートするには、springMVCのバージョンが4.2以上である必要があります
1.コントローラはCORSを設定します
1.1。コントローラーメソッドのCORS構成、@ CrossOriginアノテーションを@RequestMappingアノテーションハンドラーメソッドに追加してCORSを有効にすることができます(デフォルトでは、@ CrossOriginは@RequestMappingアノテーションで指定されたすべてのソースとHTTPメソッドを許可します)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
:中でも@CrossOrigin 2つのパラメータである
起源:アクセスすることが許可されているドメインのリスト
MAXAGEをキャッシュは、応答を準備する前に持続する最大時間(秒単位)は:
1.2。コントローラ全体で@CrossOriginを有効にします
@CrossOrigin(origins = "http://baidu.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
1.3。コントローラーとメソッドレベルのCORS構成の両方を使用して、Springは2つのアノテーション属性をマージして、マージされたCORS構成を作成します
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin(origins = "http://baidu.com")
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
1.4。Spring Securityを使用している場合は、必ずSpring SecurityレベルでCORSを有効にし、Spring MVCレベルで定義された構成を利用できるようにしてください。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and()...
}
}
2.グローバルCORS構成
きめ細かいアノテーションベースの構成に加えて、いくつかのグローバルCORS構成を定義する必要がある場合もあります。これはフィルターの使用に似ていますが、Spring MVCとして宣言し、細かい@CrossOrigin構成と組み合わせることができます。デフォルトでは、すべてのオリジンとGET、HEAD、POSTメソッドが許可されています
JavaConfig
は、アプリケーション全体のCORSを次のように簡素化します。
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
Spring Bootを使用している場合は、WebMvcConfigurer Beanを次のように宣言することをお勧めします。
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
};
}
}
任意の属性を簡単に変更し、このCORS構成を特定のパスパターンにのみ適用できます。
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://baidu.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
Spring Securityを使用している場合は、必ずSpring SecurityレベルでCORSを有効にし、Spring MVCレベルで定義された構成を利用できるようにしてください。
PS:Springアノテーション@CrossOriginが機能しない理由
1. @CrossOriginをサポートするには、springMVCのバージョンが4.2以上である必要があります。2
。@CrossOrigin以外では、クロスドメインリクエストの問題は解決されませんが、リクエストが正しくないと、予期した応答が得られず、ブラウザーがクロスドメインの問題を引き起こします
3 、@ CrossOriginアノテーションをControllerアノテーションの上に追加した後も、クロスドメインの問題が発生します。解決策の1つは
、GetメソッドとPostメソッドが@RequestMappingアノテーションで指定されていないことです。特定の指定の後、問題は解決されます
コードは以下のように表示されます:
@CrossOrigin
@RestController
public class person{
@RequestMapping(method = RequestMethod.GET)
public String add() {
// ...
}
}