RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
SpringSecurity自定义登录成功后的逻辑

环境: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部分源码

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

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

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

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

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

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


分享名称:SpringSecurity自定义登录成功后的逻辑
分享路径:http://www.jxjierui.cn/article/cosjhij.html