最近在使用springboot做项目,和前端flutter交互时,发现flutter无法通过后台的登录验证。后来发现是因为flutter向后台发送http请求时session为空,无法通过拦截器的验证。
我这里的拦截器会从http请求的request请求中获取session,并且获取存入session的user键对应的值。如果session为空,就会重新回到登录页面。
解决方法其实很简单,我们要从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=********’