大家好,我是苏承栈。最近在使用Sa-Token做业务时,遇到了一个头疼的问题:跨域问题解决后,认证中心的token失效了,Cookie也跟着丢失了。今天就来跟大家聊聊这个坑,以及我是怎么解决的。
问题分析
这个问题其实是因为跨域问题导致的。当跨域请求解决后,HttpServletRequest变成了新的对象,导致Cookie被清空了,或者Cookie本身没有携带过来。这就是Sa-Token的一个大坑。
解决方案
为了避免这个问题,我采取了以下两种方法:
- 在登录成功后,如果需要在客户端请求其他路径,可以在该路径上携带token。然后到认证中心时,利用StpUtil工具类将token设置到认证中心的request中。
- 如果认证中心重定向回来,token也可能丢失。所以我们将token放在重定向地址里作为参数,就不会丢失了。
代码示例
下面是客户端的拦截器代码示例:
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
/** 注册 [Sa-Token全局过滤器] */
@Bean
public SaServletFilter getSaServletFilter() {
return new SaServletFilter()
.addInclude(
