前后端分离,SpringBoot拦截器中,获取的请求头token为NULL问题解决
背景:
在做前后端分离时,牵扯到跨域,但是已经设置了跨域
前端设置了允许携带Cookieaxios.defaults.withCredentials = true;
后端也配置了跨域:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { //项目中的所有接口都支持跨域 registry.addMapping("/**") //所有地址都可以访问,也可以配置具体地址 .allowedOrigins("*") //允许的请求方式 .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") //是否支持跨域Cookie .allowCredentials(true) // 跨域允许时间 .maxAge(3600); } }
浏览器端查看发送的请求,请求头中包含Authorization
但是在后端拦截器中获取的参数总是为null
原因:
实际上发送了两次请求,第一次为OPTIONS请求,第二次才GET/POST...请求
在OPTIONS请求中,不会携带请求头的参数,所以在拦截器上获取请求头为空,自定义的拦截器拦截成功
第一次请求不能通过,就不能获取第二次的请求了GET/POST...
第一次请求不带参数,第二次请求才带参数
解决:
在拦截器中,如果请求为OPTIONS
请求,则返回true,表示可以正常访问,然后就会收到真正的GET/POST
请求
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { System.out.println("OPTIONS请求,放行"); return true; }
分类:
SpringBoot
, Vue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)