springboot使用cors三种方式解决跨域问题

文章讨论了浏览器的同源策略导致的跨域问题,以及如何使用CORS(跨域资源共享)来解决这个问题。在SpringBoot项目中,提供了三种解决方案:1)在Controller方法上添加@CrossOrigin注解;2)创建CORS过滤器处理全局跨域;3)实现WebMvcConfigurer接口来自定义跨域设置。这三种方式都能允许不同源的请求访问资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 为什么又跨域这个问题的出现
    1. 这是浏览器的一个保护机制
    2. 因为浏览器有同源策略(安全策略)
    3. 什么是同源:(url中)
        1. 协议
        2. 域名
        3. 端口
        4. 这三个相同就是同源(必须一致),如果不一致,就导致了跨域问题的出现
  1. 使用CORS解决
    1. 什么是cors(Cross Origin Resource Sharing:跨域资源共享)
    2. 它由一系列传输的[HTTP头]组成
      2.这些HTTP头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应。
///Spring Boot项目中解决跨域的3种方案
//使用cros的原理是,每次请求之后,后端返回给前端的响应,他的响应头都会进行设置资源共享
1、在Controller方法上添加@CrossOrigin 注解

    @GetMapping("/list")
    @CrossOrigin
    public List<String> List(){}
    //但是这个方法需要每个Controller都要添加,很麻烦
    

2.添加cors过滤器,解决每个方法都要加CrossOrigin问题
    在配置包中(configuration)添加cors过滤器(CorsConfig)

    @Configuration      
    public class CorsConfig(){
        @Bean
        public CorsFilter crosFilter(){
            //创建CorsConfiguration对象
            CorsConfiguration corsConfiguration = new CrosConfiguration();
            //允许所有的请求都可以通过
            corsConfiguration.addAllowedOrigin("*");
            //设置请求头字段
            corsCofniguration.addAllowedHeader("*");
            //请求的方式(get,post)
            corsConfiguration.addAllowedMethod("*");
            //创建source对象
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            //将你要请求的路径进行设置(请求路径,配置类)
            source.registerCorsConfiguration("/**",crosConfiguration);
            return new Corsfilter(source);
        }    
    }

//3.使用接口的形式
   //实现webMvcConfigurer接口,重写addCorsMapping方法
    @configuration
    public class corsconfig implements WebMvcConfigurer {
        @override
		public void addCorsMappings(corsRegistry registry){
            egistry.addMapping("/**")//允许跨域访问的路径
            .allowedorigins("*")//允许所有的请求
            .allowedHethods("POST","GET","PUT","OPTIONS","DELETED")//允许请求方法
            .maxAge(168000)//设置预验间隔时间
            .allowedHeaders("*")//允许头部设置
            .allowcredentials(true);//是否发送cookie
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁惜若༒奔已꧂

争取做到更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值