首页 新闻 搜索 专区 学院

Spring Security使用“记住我”选项,用户登录后重启浏览器,为什么会话id会改变?

0
悬赏园豆:5 [待解决问题]

使用Spring Security做权限管理,此项目前后端未分离。在配置中开启了“记住我”选项。同时在登录成功处理器中添加了一个任务:当用户成功登录后,从数据库中查询用户的相关信息(例如用户名、未读消息数等)存入SessionAttributes中。

当用户登录时,我发现服务器向浏览器设置了两个cookie:JSESSIONID和remember-me。JSESSIONID的到期时间是浏览器会话结束,remember-me的到期时间是两周后。然后重启浏览器再打开该网站,发现用户仍处于登录状态,remember-me的cookie还是原来那个,而JSESSIONID已经换了,同时原本存在SessionAttributes中的内容已经没有了。

这里存在SessionAttributes中内容没有是正常的,因为会话id都变了,说明Spring Security给用户分配一个新会话。但是我不明白的是,为什么我开启了“记住我”选项,重启浏览器后,服务器不给我分配原本的会话,而是给我分配一个新会话呢?也许是因为安全问题吧。

我希望开启“记住我”选项后,用户登录后重新打开网站,分配给用户的会话仍然是原本的会话,或者至少能让用户在使用“记住我”选项登录后,在重新打开此网站时,能执行一些操作,例如从数据库中读取用户的相关信息等。

-------------

现在算是解决了一半问题了。能让用户重启浏览器打开网站时自动执行读取数据库操作。方法就是重写TokenBasedRememberMeServices.processAutoLoginCookie(String[] cookieTokens, HttpServletRequest request, HttpServletResponse response)方法,在这个方法里可以从数据库中读取用户的信息并存入SessionAttributes中。然后还得在SpringSecurityConfig的protected void configure(@NotNull HttpSecurity http)方法中配置:http.rememberMe().rememberMeServices(myRememberMeServices)

Halloworlds的主页 Halloworlds | 初学一级 | 园豆:195
提问于:2022-02-27 13:48
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册