spring security Session管理

3月 11, 2018 |

Session管理的主要目标有:固定攻击的防御, 同用户并发数量的处理

SessionManagementFilter调用SessionAuthenticationStrategy 完成session相关活动管理,比如(session固定攻击防御, 同用户并发数量的处理),
超过了最大并发数的处理策略有两种:
策略为error-if-maximum-exceeded="true", 那么抛出异常, 再由AuthenticationFailureHandler.onAuthenticationFailure()进行处理, (如果设置了failureUrl, 那么重定向到该页面, 否则返回401状态码)
策略为expired-url, 那么会将最早的一个session设置为超时,具体通过SessionRegistry接口设置超时。
当超时的session登录时,ConcurrentSessionFilter 通过SessionRegistry 发现当前session已经超时无效, 那么重定向到expired-url="/none/sessionExpired.jsp" 配置的页面,
注意, 如果filterChain中有RememberMeAuthenticationFilter, 那么expired-url= ""数据配置的路径可能无法请求, 当执行到RememberMeAuthenticationFilter 时会按rememberMe处理而不是重定向到sessionExpired.jsp页面。这三个filter的顺序如下
ConcurrentSessionFilter->RememberMeAuthenticationFilter->SessionManagementFilter

同时我发现文档中关于HttpSessionEventPublisher的配置完全是多余的 , HttpSessionCreatedEvent和HttpSessionDestroyedEvent事件没有listener处理

Posted in: Spring Security

Comments are closed.