首页IT科技springboot跨域解决(【踩坑记录】SpringBoot跨域配置不生效)

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

时间2025-09-17 20:21:49分类IT科技浏览5153
导读:问题复现:...

问题复现:

明明在拦截器里配置了跨域                ,就是不生效                       ,使用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之前                       ,再测试没问题啦

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
百度贴吧五河吧(五河县百度百科) 图灵测试用来测试什么(AIGC技术周报|图灵测试不是AGI的智力标准;SegGPT:在上下文中分割一切;ChatGPT能玩好文字游戏吗?)