SpringBoot项目中使用Cros解决跨域问题

  作为一个java后端开发人员,在进行项目开发的时候,一定会进行资源上的交互,久走夜路,必然会遇到跨域访问问题;下面简单了解一下什么是跨域问题。

跨域问题的由来

在这里插入图片描述

  首先跨域源自于浏览器的同源策略,所谓的同源策略即:协议相同、域名相同、端口相同,同源策略是Netscape提出的一个著名的安全策略,出于浏览器访问安全来考虑的,但是我们在实际的项目开发中又有跨域访问资源的需求,此时我们就面临一个问题:跨域访问安全!

浏览器使用同源策略的目的——保护用户隐私

如果不使用同源策略,那我们能干啥?
1.可以获取不同源的不同源的DOM
2.可以获取到不同源的Cookie、LocalStorage、IndexDB
3.可以发送不同源的AJAX请求,且浏览器不会对其进行拦截。

如果不使用同源策略,可能导致的后果?

如果没有同源策略,那么我们可能会被某个恶意网站获取到其他网站的Cookie等信息,如果这些用户隐私被恶意获取,那么导致的后果可能无法估量。

跨域问题解决方案

  通过上面的介绍,我们知道了浏览器的同源策略对于用户隐私保护的重要性,但是如果我们想要进行跨域资源访问也不是没有办法:

JSONP(JSON with Padding,)

  首先jsonp是一个比较传统的前端的跨域问题解决方案,大致的思路就是浏览器不会对script标签的src属性进行跨域访问拦截,JSONP就是利用了这一点,在发起请求的时候,将请求放在src属性中,从而避开浏览器的跨域拦截。
  JSONP有一个很大的缺陷:那就是只支持GET请求,不支持其他类型的请求。

CROS(Cross-Origin Resource Sharing)
  在Springboot项目中,使用Cros来解决浏览器的跨域安全访问是现下一种非常流行的解决方案,而且SpringMvc对于Cros有很好的支撑,有时候一个简单的注解就能轻松解决跨域访问问题。

CROS解决跨域问题案例
1.创建一个Springboot web项目,添加web依赖

在这里插入图片描述
此Cros1项目作为一个Provider来使用
2.Cros1项目中随便写一个Controller类
在这里插入图片描述
3.新建一个Cros2项目,来请求Cros1项目中的资源
Cros2项目中只写一个html页面来发起一个get请求Cros1中的hello接口。

Cros1的端口为:8080,Cros2的端口为8081
在这里插入图片描述
4.分别启动Cros1和Cros2项目,然后从浏览器中访问Cros2项目中的index.html页面。
在这里插入图片描述
5.点击GET,发起get请求。从浏览器的控制台中可以发现报了如下跨域访问错误。
在这里插入图片描述
6.此时到Cros1项目中的controller中添加一个注解,即可解决此问题
在这里插入图片描述
7.以上注解表示此接口允许接受来自http://localhost:8081的访问请求,然后重启Cros1项目,刷新网页,发现能够返回接口数据。
在这里插入图片描述

配置全局跨域访问

  通过上面一个简单的案例发现,实现跨域访问好像也没有进行什么特殊的配置,但是!如果我们在每个接口或者类上面都来这么一个注解,还是会比较费事的。此时我们可以使用@Configuration定义一个配置类:

@Configuration
public class CrosConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:8081")
                .maxAge(300 * 1000)
                .allowedHeaders("*")
                .allowedMethods("*");

    }
}

在这里插入图片描述
定义了以上的配置类之后,我们再将controller接口中的@CrosOrigin(“http://localhost:8081”)去掉,然后重启Cros1项目,再访问Cros2项目(端口8081)中的index.html页面,发送请求发现能够访问8080端口的资源。

在这里插入图片描述

总结:
在本案例中,使用Cros解决跨域访问问题使用到的核心注解就是@CrosOrigin,此注解可以使用在类上,也可以使用在某个单独的方法上,当使用在类名上的时候,表示此类中的方法均接受指定的资源访问请求。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值