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

Posted 神游坐忘峰大话IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们的项目是如何彻底解决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请求,直接返回成功。

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

另外在RepeatedlyReadRequestWrapper对应的过滤器RepeatedlyReadFilter加入了如下代码:

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

那么也直接走ServletRequest request。

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


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


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

神游坐忘峰大话IT

以上是关于我们的项目是如何彻底解决Springboot跨域问题的的主要内容,如果未能解决你的问题,请参考以下文章

如何解决js跨域问题

JAVA后台配置,APP请求跨域问提

springboot解决跨域问题(Cors)

springboot的跨域

彻底解决跨域问题

前后端分离项目,如何解决跨域问题