Spring Security 自定义登录成功后的逻辑

系统运维2025-11-05 13:53:0977

环境:Spring Boot 2.2.11.RELEASE + Spring Security5.2.7

说下背景:我们有个项目是自定基于NW.js,用户登录是义登通过Spring Security来实现的。我们在nw.js环境下做了一个校验,录成如果用户2小时内没有任何的功后操作那么系统将自动调整到登录页面;这样就出现了问题,我们有很多的自定用户是7*24小时不关电脑的。当用户下班2小时后系统就自动跳转到了登录页面,义登第二天用户上班了后登录系统调不到之前的录成操作页面。用户天天投诉。功后其实当我们访问需要用户认证的自定页面时没登录情况下都会跳到登录页如果30分钟内什么都不操作同样也是跳不回去的。

基于上面的IT技术网义登问题后来跟踪了下源码发现Spring Security是通过session来保存之前的请求的所有相关信息,源码如下:

认证通过后执行下面的录成逻辑

AbstractAuthenticationProcessingFilter.java

这里的successHandler默认是使用的如下handler。

SavedRequestAwareAuthenticationSuccessHandler.java

requestCache对象的功后实例是HttpSessionRequestCache

HttpSessionRequestCache.java部分源码

DefaultSavedRequest savedRequest = new DefaultSavedRequest(request,portResolver); if (createSessionAllowed || request.getSession(false) != null) {     request.getSession().setAttribute(this.sessionAttrName, savedRequest);     logger.debug("DefaultSavedRequest added to Session: " + savedRequest); } 

 这里就是把当前的request对象进行了保存然后放到了session中,保存后再跳转到登录授权页面。自定session不配置的义登情况下默认就是30分钟。

当时为了简单快速解决问题,录成我之间吧session的亿华云有效性调整了1天时间,安静了一段时间后,以为没事了。万万没想到后来有几个用户有投诉了o(╥﹏╥)o,大概了解了下他们说有时候几天才用一次系统(就这样他们还是不关电脑)。。。没办法只能继续改代码了。

通过上面贴的源码也知道了就是从session获取到之前的request对象然后进行了重定向。

在配置HttpSecurity时配置自定义sucessHandler,如下

nw.js在做跳转的时候,我把用户之前的操作页面地址记录下来作为一个参数传递。这样就不怕session过期了。

香港云服务器
本文地址:http://www.bzuk.cn/news/365a30899326.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

三星手表Gear3(功能强大,设计精致,让您与科技时尚同行)

如何使用启动U盘安装系统(以Windows系统为例,详解U盘安装系统的步骤与注意事项)

解决WPS版本太低的方法(一步步升级,畅享高效办公)

探索K610DA29D4的功能和性能(一款引领科技发展的智能设备)

电脑机箱开着的致命错误(如何避免电脑机箱开着带来的隐患)

华硕灵耀U4100UQ(华硕灵耀U4100UQ的配置、性能和用户评价)

HTCD516w手机评测及功能介绍(一款性价比超高的智能手机推荐)

深入浅出(通过深度在线学习,轻松掌握系统技能)

友情链接

滇ICP备2023006006号-33