我们的项目是如何彻底解决Springboot跨域问题的

项目用Springboot写的,和客户端的交互采用了http+json的模式,为了在拦截器当中获得请求数据,从而进行一些签名的校验,我们参考了网上的帖子,加入了RepeatedlyReadRequestWrapper。

如果不加入这个,我们在拦截器当中从流当中拿到数据,到了Controller当中,request当中的数据就已经被清空了。

加这个的原因是为了针对部分请求过来的时候,我们从流当中拿到数据,然后再通过这个RepeatedlyReadRequestWrapper把数据复制一份放回流当中,这样Controller就能拿到数据了。

这个过程就不专门发帖了,网上很多。如下的链接就可以

https://www.cnblogs.com/alter888/p/8919865.html

而针对跨域的配置,我们只需要建立一个CorsFilter即可,主要代码如下:
在这里插入图片描述
加入这样的跨域后,结合上述的RepeatedlyReadRequestWrapper,我们发现H5请求还是存在跨域问题——具体什么问题,因为项目各种紧张,所以我们当时采取了如下做法:

是对于H5请求的特定路径,不走拦截器统一验签,对于这些路径,我们还是使用普通的ServletRequest request,这样拦截器不拿数据,直接到Controller去拿,所谓的验签也需要在Controller来做,这样一份验签的代码,会至少存在两个入口,这对于写代码而言,是极其不好的。

今天经过和前端沟通,发现,原来H5的跨域请求,会先发一个OPTIONS请求,发完之后,才会进行真正的请求。

如果是因为这个原因,那么解决问题就容易多了,在拦截器当中只要收到OPTIONS请求,直接返回成功。
在这里插入图片描述
另外在RepeatedlyReadRequestWrapper对应的过滤器RepeatedlyReadFilter加入了如下代码:
在这里插入图片描述
那么也直接走ServletRequest request。

至此,跨域问题在Springboot当中的问题彻底解决!

至于说在SpringCloud还套了一层gateway是如何解决跨域问题、以及跨域之后哪些安全问题需要注意的,另外的帖子再说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值