问题原因
前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话.
在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了.
前端处理
- 在 vue 中所有引入 axios 的地方添加如下代码,允许跨域携带cookie
import axios from 'axios'
axios.defaults.withCredentials = true // 添加代码:允许跨域携带cookie
后端处理
- 新建 WebAppConfig ,实现 WebMvcConfigurer 接口,允许前端跨域
public class WebAppConfig implements WebMvcConfigurer {
//前端跨域
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")//设置允许跨域的路径
.allowedOrigins("*")//设置允许跨域请求的域名
.allowCredentials(true)//是否允许证书 不再默认开启
.allowedMethods("GET", "POST", "PUT", "DELETE")//设置允许的方法
.maxAge(3600);//跨域允许时间
}
}
问题解决, 重启工程后我们再次打印每次请求的sessionID就会发现sessionID是一致的, 当然也就可以获取我们存入session的内容了.