SpringBoot学习之路---跨域的基本介绍及SpringBoot解决CORS跨域问题

相信不少朋友们在前后端整合时,都会碰到跨域问题。特别是对于每一个前端开发者来说,这个问题就像是"狗皮膏药"般

针对这个怎么解决?一般解决方向分为前端和后端,前端有个解决思路就是自己写一个后端模块,然后再去请求目标接口,经过处理再返回,而浏览器再去请求你自己写的这个后端模块,一般这种方式称为代理,比如nginx反向代理好像就是实现原理。但今天我们来讲讲后端基于SpringBoot的解决跨域的方式~


跨域问题的产生是因为浏览器的同源策略,官方的介绍是同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制.

这个问题说白了就是当前页面和访问的ip地址或者是域名不同,导致我们不能访问别的ip地址下的脚本或资源。为什么浏览器要这么限制,这里引用一个我在网上看到的一篇博客,其中有这样一个场景:
有一个小小的东西叫cookie大家应该知道,一般用来处理登录等场景,目的是让服务端知道谁发出的这次请求。如果你请求了接口进行登录,服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中,服务端就能知道这个用户已经登录过了。知道这个之后,我们来看场景:
1.你准备去清空你的购物车,于是打开了买买买网站www.maimaimai.com,然后登录成功,一看,购物车东西这么少,不行,还得买多点。
2.你在看有什么东西买的过程中,你的好基友发给你一个链接www.nidongde.com,一脸yin笑地跟你说:“你懂的”,你毫不犹豫打开了。
3.你饶有兴致地浏览着www.nidongde.com,谁知这个网站暗地里做了些不可描述的事情!由于没有同源策略的限制,它向www.maimaimai.com发起了请求!聪明的你一定想到上面的话“服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中”,这样一来,这个不法网站就相当于登录了你的账号,可以为所欲为了!如果这不是一个买买买账号,而是你的银行账号,那……

可想而知如果没有这个同源策略的话,该有多危险…那我们总要去着手解决我们的问题把,了解了跨域之后,我们就用SpringBoot的方式去K.O他。


废话不多说,直接进入正题:

@CrossOrign(orign="",maxAge="")

我们可以在需要的方法加上这个注解,这样SpringBoot就会自动帮助我们设置一些响应头了。这其中有两个参数originmaxAge,前者是允许可访问的域列表,后者是准备响应前的缓存持续的最大时间(以秒为单位),可以根据需求而自定配置,同时还可以直接加载controller类上,这样类上的所有方法都支持跨域了

在配置完这个注解之后,还要注意,需要在自定义的WebMvcConfigurerAdapter中覆写如下方法:

 @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowCredentials(true).maxAge(3600);
    }

之后就解决了跨域问题啦~

发布了60 篇原创文章 · 获赞 64 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Jokeronee/article/details/105545477
今日推荐