flutter与spring boot交互获取session

最近在使用springboot做项目,和前端flutter交互时,发现flutter无法通过后台的登录验证。后来发现是因为flutter向后台发送http请求时session为空,无法通过拦截器的验证。

1.springboot后台拦截器代码


String url=request.getRequestURI();
HttpSession session=request.getSession(false);
Logger logger= LogManager.getLogger();
User user= (User) request.getSession().getAttribute("user");
if( user == null){
 response.sendRedirect("");
 return false;
}

我这里的拦截器会从http请求的request请求中获取session,并且获取存入session的user键对应的值。如果session为空,就会重新回到登录页面。

2.解决方法


解决方法其实很简单,我们要从http请求头入手。如果对cookie以及session认证机制有所了解的话,可以知道用户在客户端发出请求后,服务器会生成session并存储在服务器中。但是服务器一旦通过验证会生成JSESSIONID并放在本地存储的cookie中。所以我们只需要获取后台生成的session id并在每次发出http请求时在报文头部中添加这个session id。

后台代码

session.setAttribute("user",userDB);//HttpSession session
logger.info("sessioni: "+session.getId());
response.setHeader("Set-Cookie", session.getId());

在响应头添加生成的session的id,在flutter这样操作:

response.header[‘set-cookie’]=$jsessionId

之后的每次请求在请求头上添加,可以设置一个全局变量赋值

cookie:JSESSIONID=*******;

request.header[‘cookie’]=‘JSESSIONID=********’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值