【实现方案】Springboot整合token的权限管理实现(三)—— 解决token或cookie过期后的跨域问题

本文探讨了在JWT Token拦截器中处理非法或过期Token时出现的跨域请求错误。通过在响应中添加必要的头部信息,解决了前端跨域请求的问题,确保了跨域资源共享(CORS)的正确配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前置说明

在token拦截器中,处理非法 (包含过期)token 的方法无非就是两种,一种是直接 return false,另一种是 throws Exception。如果是使用 throws Exception ,那么直接 http status code 就是500,在前端也很好捕捉。但是如果直接 return false,那浏览器还是会报出跨域请求的错误。

解决方案

问题原因

其实导致这个问题的原因很简单,如果直接 token 的拦截器返回 false就直接终止请求,返回 response。也就是说我们之前配置的跨域函数不会被执行。
造成前端报错跨域请求的根本原因在于,response 中没有必要的头部信息,让前端认为你这个服务器是可以被访问的。所以显而易见,我们只需要在每一个 return false 的前面加上头部信息就好了。所以我就自己写了addHeader函数。

	public void addHeader(HttpServletRequest request, HttpServletResponse response){
        String origin = request.getHeader("Origin");
        response.addHeader("Access-Control-Allow-Origin", origin);
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
        response.addHeader("Access-Control-Allow-Credentials", "true");
        response.addHeader("Access-Control-Max-Age", "3600");
    }

其中 Access-Control-Allow-Origin 不能 = “*”,这样前端还是会报跨域请求错误。必须拿到源地址,指向源地址才可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值