您现在的位置是:亿华云 > 人工智能

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

亿华云2025-10-03 18:42:24【人工智能】0人已围观

简介环境:Spring Boot 2.2.11.RELEASE + Spring Security5.2.7说下背景:我们有个项目是基于NW.js,用户登录是通过Spring Security来实现的。我

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

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

基于上面的服务器托管义登问题后来跟踪了下源码发现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过期了。

亿华云计算

很赞哦!(6981)