Springboot 前后端分离项目中使用拦截器获取不到token或者token为空的问题(OPTION请求被拦截问题)

转载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配置跨域

@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

if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
		return true;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值