转载Springboot前后端分离项目中使用拦截器获取不到token或者token为空的问题(OPTION请求被拦截问题)
前言
目是前后端分离的,并且springboot也配置了跨域功能。
但是配置了JWT功能、以及验证器验证之后却出现了获取不到jwt的问题。获取参数为 null。并且全局异常拦截失效,前端响应为cors跨域问题获取不到数据。
使用postman可以正常请求并获取数据,考虑到是不是因为自己header中的jwt字段不是标准的header字段,尝试放到Authorization中也是null,并且全局拦截也是失效的。
又考虑到是不是因为cors配置加载于拦截器之后,又在拦截器里面配置响应以及header允许cors,一久无效。
最后看到《前后端分离,SpringBoot拦截器中,获取的请求头token为NULL问题解决》这篇文章才得以解决,前端在请求的时候会发送一个OPTION请求来验证本次请求是否安全,但是springboot的拦截器会拦截所有请求。因为第一次是OPTION没有携带JWT,所以验证失败导致一连串的问题。
Edge、Google浏览器的开发者工具中不显示OPTION请求(可以通过配置显示)。
FireFox浏览器默认支持显示。FireFox YYDS
SpringBoot配置跨域文章来源:https://www.toymoban.com/news/detail-630062.html
@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);
}
}
解决方案
在JWT拦截器方法的最前端添加判断是否是OPTIONS请求,如果是就返回TRUE文章来源地址https://www.toymoban.com/news/detail-630062.html
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
return true;
}
到了这里,关于Springboot 前后端分离项目中使用拦截器获取不到token或者token为空的问题(OPTION请求被拦截问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!