前言
登陆的时候设置了 request.getSession().setAttribute("user", user);
再验证是否登录,获取的时候是个空值 request.getSession().getAttribute("user");
解决方法
这个是因为在前后端分离架构中,使用vue发送ajax存在跨域请求没有携带请求凭证(cookie、HTTP认证及客户端SSL证明)造成request.getSession()获取的是不同的sessionId。
登录之后的请求会带登录用户信息,需要把登录时的cookie设置到之后的请求头里面。而跨域请求要想带上cookie,必须要请求属性withCredentials=true,这是浏览器的同源策略导致的问题:不允许JS访问跨域的Cookie。
withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization,headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。//允许跨域携带cookie信息
axios.defaults.withCredentials = true
我这里对请求做了一个简要的封装,放在这个位置。
再次发送请求 验证是否登录、可以看到请求信息 携带了 Cookie
资料参考:
参考1