request.getSession().getAttribute 获取不到值,获取到的是null

简介: 这篇文章讨论了在使用前后端分离架构时,通过AJAX请求进行会话管理时遇到的跨域问题,导致`request.getSession().getAttribute`获取到的值为null。解决办法是设置`withCredentials=true`以允许跨域请求携带cookie,确保请求凭证得以传递。

前言

  登陆的时候设置了 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

axios.defaults.withCredentials = true 前端跨域传递Cookie设置

在这里插入图片描述

相关文章
|
4月前
|
前端开发 网络安全
成功解决:request.getSession().getAttribute(“user“);获取值为空的问题
该文章讲述了解决在使用前后端分离技术(Vue+SpringBoot)时,因跨域问题导致的`request.getSession().getAttribute("user")`获取值为空的问题,通过后端设置响应头和前端配置axios携带凭证来确保Session共享。
|
6月前
request.getParameter()与request.getAttribute()
request.getParameter()与request.getAttribute()
|
应用服务中间件
|
Java
Request和Response对象详解
Request和Response对象详解
221 0
Request和Response对象详解
request.setAttribute的用法
request.setAttribute的用法
698 0
|
Web App开发 iOS开发 Windows
|
Web App开发 iOS开发 Windows

热门文章

最新文章