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

代码演示

局部跨域

只需要在方法上加这个注解就可以了,其他的配置参数可以写在注解的value中,如maxAge

只要这个方法添加上这个注解,就可以实现局部的跨域资源共享访问。

可以自己弄个前端项目来访问这个方法。

全局跨域

只需要在项目中添加这个配置类就可以了,就能实现全局跨域的设置

java 复制代码
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/");

    }
}
相关推荐
IDRSolutions_CN3 分钟前
(教程)用 Java 从 PDF 中提取嵌入的文件
java·经验分享·pdf·软件工程·团队开发
海波东6 分钟前
单例模式懒汉式、饿汉式(线程安全)
java·安全·单例模式
lwprain18 分钟前
解决tomcat双击startup.bat乱码的几种方法
java·tomcat
小汤猿人类39 分钟前
nacos-gateway动态路由
java·前端·gateway
GraduationDesign44 分钟前
基于SpringBoot的在线文档管理系统的设计与实现
java·spring boot·后端
TANGLONG2221 小时前
【初阶数据结构与算法】八大排序之非递归系列( 快排(使用栈或队列实现)、归并排序)
java·c语言·数据结构·c++·算法·蓝桥杯·排序算法
言之。1 小时前
【Java】面试题 并发安全 (1)
java·开发语言
m0_748234521 小时前
2025最新版Java面试八股文大全
java·开发语言·面试
van叶~1 小时前
仓颉语言实战——2.名字、作用域、变量、修饰符
android·java·javascript·仓颉
张声录11 小时前
【ETCD】【实操篇(十九)】ETCD基准测试实战
java·数据库·etcd