【踩坑记录】SpringBoot跨域配置不生效(springbootcors跨域)

  本篇文章为你整理了【踩坑记录】SpringBoot跨域配置不生效(springbootcors跨域)的详细内容,包含有springboot跨域问题解决方案 springbootcors跨域 springboot2.4跨域 spring boot跨域配置 【踩坑记录】SpringBoot跨域配置不生效,希望能帮助你了解 【踩坑记录】SpringBoot跨域配置不生效。

  问题复现:

  明明在拦截器里配置了跨域,就是不生效,使用PostMan等后端调试工具调试,均正常,Response中有Access-Control-Allow-Origin: *,这个Header,但是前端一直反馈,通过浏览器js代码fetch报跨域问题。如图:

  

  嗯,,,看看浏览器请求:

  

  确实在报CORS错误

  问题分析:

  看到这个浏览器请求对http比较了解的同学可能已经猜到大概了,对于非Simple请求,浏览器会先发送一次OPTIONS请求,坑就在这里,如果我们用了自定义的header,就不是Simple请求,意味着会发送一次OPTIONS,就是上面浏览器调试工具中的preflight,就是这个请求出现了跨域问题。继续分析后端代码,问题出现了:

  本次项目安全认证做在了Filter中,其实这个没问题,好多项目都是在Filter中做的安全认证,不过,它的CORS配置配在了拦截器中(Interceptor),而且在权限认证Filter认证失败时直接返回,导致没有经过拦截器,直接返回了。不过这种情况也不正常,因为即使安全认证没通过的请求没经过过滤器直接返回了,那正常能通过安全认证的请求应该正常返回跨域啊,为什么通过postman请求一切正常,浏览器却报错呢?原因就是我们上面提到的,后端没有对OPTIONS请求做单独处理,意味着OPTIONS请求也会经过安全认证的Filter,而浏览器发出的OPTIONS请求是没有携带安全认证Header的,所以必然认证失败,然后直接返回,没有加CORS的Header,导致请求本身能访问,但preflight过不了安全认证Filter访问不了,直接返回跨域问题。

  问题解决:

  找到原因,剩下的就比较简单了,把CORS配置放到Filter上,并且把优先级提高,起码要在AuthFilter之前,再测试没问题啦

  

  

   posted on 2023-02-20 14:02马儿跑

  阅读(68)

  评论(0)

  编辑

  收藏

  举报

  以上就是【踩坑记录】SpringBoot跨域配置不生效(springbootcors跨域)的详细内容,想要了解更多 【踩坑记录】SpringBoot跨域配置不生效的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: