61. SpringBoot -----クロスドメインリソース設定---ローカル設定とグローバル設定

★ドメインを超えたリソース共有の意義

▲ 在前后端分离的开发架构中,前端应用和后端应用往往是彻底隔离的,
       二者不在同一个应用服务器内、甚至不再同一台物理节点上。
因此前端应用和后端应用就不在同一个域里。

▲ 在这种架构下,前端应用可能采用前端框架(比如Angular、Vue等)向后端应用发送请求,

这种请求就是跨域请求,后端应用就需要允许跨域资源共享。

★ クロスドメインリソース共有の設定

部分メソッド: @CrossOrigin アノテーションを使用して、コントローラーの処理メソッドを変更します。
部分的とは、ドメインをまたがって特定のメソッドのみをリクエストできるように設定することを意味します。

グローバル メソッド: コンテナーで WebMvcConfigurer または WebFluxConfigurer Bean を定義し、Bean にカスタムの addCorsMappings(CorsRegistry) メソッドを実装してグローバル CORS 構成を設定します。
(つまり、構成クラスを定義し、WebMvcConfigurer または WebFluxConfigurer クラスを実装します)

假如要配置全局的COS

@Configuration
public class Config implements WebMvcConfigurer
{

@Override
public void addCorsMappings(CorsRegistry registry) 
{
    // 指定对于/api/**路径下的所有请求
    registry.addMapping("/api/**")
        // 允许接收来自于http://www.crazyit.org和http://www.fkjava.org的请求
        .allowedOrigins("http://www.crazyit.org", "http://www.fkjava.org")
        // 允许处理GET, PUT, POST, DELETE, PATCH请求
        .allowedMethods("GET", "PUT", "POST", "DELETE", "PATCH")
        // 只允许哪些请求头
        .allowedHeaders("header1", "header2", "header3")
        .allowCredentials(true).maxAge(3600);
    // 指定对于/root/**路径下的所有请求
    registry.addMapping("/root/**")
        // 允许接收来自于http://www.crazyit.org的请求
        .allowedOrigins("http://www.crazyit.org")
        // 允许处理GET, POST请求
        .allowedMethods("GET", "POST ")
        .allowCredentials(true).maxAge(1800);
    // ...
}
}

コードデモ

部分的なクロスドメイン

このアノテーションをメソッドに追加するだけで済みます。maxAge など、他の構成パラメータをアノテーションの値に書き込むことができます。
このアノテーションがこのメソッドに追加されている限り、ローカルのクロスドメイン リソース共有アクセスを実現できます。
自分でフロントエンド プロジェクトを作成して、このメソッドにアクセスすることができます。
ここに画像の説明を挿入します

グローバルドメイン

グローバルなクロスドメイン設定を実現するには、この構成クラスをプロジェクトに追加するだけで済みます。
ここに画像の説明を挿入します

package cn.ljh.app.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//设置全局跨域资源共享
@Configuration
public class CosConfig implements WebMvcConfigurer
{
    
    
    @Override
    public void addCorsMappings(CorsRegistry registry)
    {
    
    
        //表示对这个项目的所有资源(就是方法)都设置跨域Cos,就是都能跨域访问
//        registry.addMapping("/**");

        registry
                //表示这个项目只有这个路径下方法可以被跨域访问到
                .addMapping("/books/**")
                .maxAge(3600)
                //允许浏览器发送自己的身份凭证过来
                .allowCredentials(true)
                //表示只允许Get请求访问
                //.allowedMethods("GET")
                //只接受来自这个地址的跨域资源共享请求
                //通过设置下面这个属性,可以限制后端应用只允许前端应用所在域来访问
                .allowedOrigins("http://locahost:8080/");

    }
}

おすすめ

転載: blog.csdn.net/weixin_44411039/article/details/132797272