我认为确保应用程序处理所有 3 三种情况(登录失败、无效会话和过期会话)是个好主意。在 Spring Security 中执行此操作的一种方法如下:
<http>
...
<!-- form login if you have one -->
<form-login authentication-failure-url="/handleLoginFailure" />
...
<custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrentSessionFilter" />
<session-management invalid-session-url="/handleSessionNoLongerActive" session-authentication-strategy-ref="concurrentSessionControlStrategy" />
</http>
<beans:bean id="concurrentSessionFilter"
class="org.springframework.security.web.session.ConcurrentSessionFilter"
c:sessionRegistry-ref="sessionRegistry"
c:expiredUrl="/handleSessionExpired">
</beans:bean>
@Bean
public SessionRegistry sessionRegistry() {
SessionRegistryImpl impl = new SessionRegistryImpl() ;
return impl;
}
@Bean
public ConcurrentSessionControlStrategy concurrentSessionControlStrategy() {
ConcurrentSessionControlStrategy impl = new ConcurrentSessionControlStrategy(sessionRegistry()) ;
return impl;
}
另请参阅会话管理。(web.xml 更改)。
根据应用程序功能,您可能还需要处理拒绝访问的情况。