前后端分离,后端拦截器无法获得前端请求的token

首先需要了解两个知识点:

跨域是指在浏览器中,一个网页试图请求另一个域(协议、域名或端口不同 )的资源时,所涉及的安全机制。在Web开发中,一般来说,由于安全性原因,浏览器会阻止一个域访问另一个域的数据,这种限制称为同源策略(Same-Origin Policy)。

进行跨域请求时,浏览器会先发送一个OPTIONS请求,以确认目标服务器允许特定的请求方法和头。

关键来了,这个自动发送的options请求,是不会带有我们的token的。而路径却是跟我们实际请求一致,因此同样会被拦截器拦截。所以即便我们设置了cros的config,options也会因为没有token而被拒绝,而实际带有token的请求却因为options被拒绝而没有发送。

解决办法:

在拦截器中加入以下代码,在识别到是OPTIONS请求时通过

java 复制代码
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
            return false; // 不继续处理后续逻辑
        }
相关推荐
Kinghiee几秒前
从零打造生产级前端错误监控 SDK:架构设计与 Vue3 实践
前端·javascript·vue.js·去重·错误捕获·上报·离线持久化
小凡同志5 分钟前
OpenSpec 手把手实战:从零跑通一个完整功能
前端·ai编程·claude
吴声子夜歌9 分钟前
Vue3——元素样式绑定
前端·javascript·vue.js·es6
San30.12 分钟前
前端进阶:从浏览器渲染原理到网络请求全链路解析
前端·网络·网络请求·浏览器渲染机制
落魄江湖行12 分钟前
基础篇八 Nuxt4 中间件进阶:请求拦截与权限校验
前端·typescript·nuxt4
艾莉丝努力练剑13 分钟前
【Linux线程】Linux系统多线程(六):<线程同步与互斥>线程同步(上)
java·linux·运维·服务器·c++·学习·线程
好家伙VCC13 分钟前
# BERT在中文文本分类中的实战优化:从基础模型到高效部署BERT(Bi
java·人工智能·python·分类·bert
身如柳絮随风扬16 分钟前
什么是缓存预热
java·spring·缓存
feng_you_ying_li17 分钟前
C++11可变模板参数,包扩展,emplace系列和push系列的区别
前端·c++·算法
hashiqimiya19 分钟前
npm查看依赖
前端·npm·node.js