flutter与spring boot交互获取session

    科技2024-11-25  31

    最近在使用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=********’

    Processed: 0.009, SQL: 8