Java | Spring Boot構成/ Nginxは、フロントエンドとバックエンドの分離プロジェクトにおけるクロスドメインの問題を解決します

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() {
    
     // ...
 }
}

おすすめ

転載: blog.csdn.net/y1534414425/article/details/107837630