1、在配置文件中增加 一个listen
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
2、FilterChainProxy 增加 ConcurrentSessionFilter
,这个Filter 要两个属性 sessionRegistry(需要SessionRegistryImpl实例expiredUrl过滤失败时跳转的url)
<http> <custom-filter position="FORM_LOGIN_FILTER" ref="loginFilter" /> <custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrentSessionFilter" /> <!-- 防止同一用户多次登录,使第二次登录失 --> <session-management session-authentication-strategy-ref="concurrentSessionControlStrategy" /> </http> <!-- Login Filter --> <beans:bean id="loginFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> <beans:property name="sessionAuthenticationStrategy" ref="concurrentSessionControlStrategy" /> <beans:property name="authenticationManager" ref="authenticationManager" /> <beans:property name="authenticationSuccessHandler" ref="loginAuthenticationSuccessHandler" /> <beans:property name="authenticationFailureHandler" ref="loginAuthenticationFailureHandler" /> </beans:bean> <beans:bean id="concurrentSessionFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter"> <beans:property name="sessionRegistry" ref="sessionRegistry" /> <beans:property name="expiredUrl" value="/admin/login" /> <beans:property name="logoutHandlers"> <beans:list> <beans:ref bean="logoutHandler" /> </beans:list> </beans:property> </beans:bean> <beans:bean id="logoutHandler" class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" /> <!-- the flowing settings for session management --> <beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" /> <beans:bean id="concurrentSessionControlStrategy" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy"> <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" /> <beans:property name="maximumSessions" value="1" /> <beans:property name="migrateSessionAttributes" value="true" /> <beans:property name="exceptionIfMaximumExceeded" value="false" /> </beans:bean>
3、代码 AbstractAuthenticationProcessingFilter 在方法dofilter()根据属性 concurrentSessionControlStrategy的方法onAuthentication
在ConcurrentSessionFilter Filter 中做具体是通过还是不过的验证
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(false); if (session != null) { SessionInformation info = sessionRegistry.getSessionInformation(session.getId()); if (info != null) { if (info.isExpired()) { // Expired - abort processing doLogout(request, response); String targetUrl = determineExpiredUrl(request, info); if (targetUrl != null) { redirectStrategy.sendRedirect(request, response, targetUrl); return; } else { response.getWriter().print("This session has been expired (possibly due to multiple concurrent " + "logins being attempted as the same user)."); response.flushBuffer(); } return; } else { // Non-expired - update last request date/time sessionRegistry.refreshLastRequest(info.getSessionId()); } } } chain.doFilter(request, response); }
相关推荐
- 在Spring Security的XML配置文件中,`<http>`元素下的`<session-management>`用于配置会话管理。例如,可以添加`<concurrency-control>`子元素来设置并发会话策略。 - `<session-management>`还可以配置`...
5. **会话管理(Session Management)**:Spring Security可以控制会话的创建、销毁以及会话固定攻击(Session Fixation)防护。默认情况下,Spring Security会自动处理会话管理。 6. **密码加密(Password ...
3. **Session Management**: 提供了会话管理策略,如防止会话固定攻击(session fixation)、会话超时检测以及单点登录(Single Sign-On, SSO)支持。 4. **CSRF Protection**: 为了防止跨站请求伪造(Cross-Site ...
7. **Session Management**:Spring Security 可以控制会话的最大并发数量,防止会话固定攻击,并提供会话超时和会话劫持的防护。 8. **国际化**:Spring Security 支持多语言,可以在认证失败和权限不足时显示不同...
2. **Session Management**:Spring Security提供了丰富的会话管理功能,包括会话固定攻击防御、会话超时检测等。 3. **频道安全**:通过HttpSessionFixationProtectionStrategy,防止会话劫持,强制重置会话ID。 ...
- **Session Management**:管理用户会话,防止会话固定攻击和并发会话控制。 2. **认证流程**: 认证流程在Spring Security中分为以下步骤: - 用户提交登录信息。 - `AuthenticationManager`验证用户凭证。 ...
4. **Session Management** - **Session Fixation Protection**: 防止会话固定攻击,确保用户会话的安全性。 - **Session Timeout**: 自动结束未活动的会话,提高安全性。 5. **CSRF防护** - Spring Security...
4. **会话管理(Session Management)**:Spring Security提供了一套完整的会话管理机制,包括会话固定保护(Session Fixation Protection)、会话超时检测以及单会话约束(防止同一用户同时登录多个设备)。...
Spring Security 是一款基于 Spring 框架的安全插件,提供了完整的安全性解决方案,包括身份认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。Spring Security 的设计目标是为...
5. **会话管理(Session Management)**:Spring Security提供会话管理功能,可以防止会话固定攻击(Session Fixation)和并发会话控制(Concurrent Session Control)。 6. **密码存储与加密(Password Storage & ...
在Spring Security 2中,配置Cookie的保存时间是一项重要的任务,因为这关乎到用户的会话持久性和安全性。Cookie是Web应用程序中用于存储用户状态的一种机制,例如登录信息、个性化设置等。正确设置Cookie的生命周期...
4. **会话管理(Session Management)** - **会话固定保护(Session Fixation Protection)**:防止会话劫持攻击,通过新创建会话来防止恶意用户利用已知会话ID。 - **会话超时(Session Timeout)**:可以设置...
6. **Session Management**:Spring Security还提供了强大的会话管理功能,包括会话固定保护、会话超时、会话并发控制等。 在4.2.3.RELEASE版本中,可能包含以下关键改进和修复: - **Bug Fixes**:修复了该版本前...
《Spring Security 3.2.3.RELEASE:企业级安全框架深度解析》 Spring Security是Java平台上广泛使用的安全框架,其3.2.3.RELEASE版本是该框架的一个稳定版本,为开发者提供了全面的安全控制,从Web应用到企业级服务...
- **Session Management**:会话管理功能,包括会话固定防护、会话超时检测和并发会话控制。 - **CSRF防护**:防止跨站请求伪造攻击,Spring Security提供了一套完整的解决方案,包括生成和验证CSRF令牌。 - **...
7. **Session Management**: 该组件管理用户会话,防止会话固定攻击和会话劫持。它可以限制同一用户同时在线的会话数量,或者设置会话超时。 **Spring Security 配置与扩展** Spring Security 提供了 XML 和 Java ...
6. **Session Management**: 管理用户的会话,可以防止会话固定、会话超时等问题,增加安全性。 7. **CSRF Protection**: 自动集成CSRF防护,防止恶意第三方在用户浏览器上模拟提交表单。 8. **Remember Me**: ...
在这个文件中,我们需要确保`sessionManagement`元素配置了`sessionRegistryBean`,以便Spring Security可以自动将新登录的用户信息注册到SessionRegistry: ```xml <!-- ... --> <session-management> ...
Spring Security旨在提供认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等核心功能。在3.0.7.RELEASE版本中,该框架已经相当成熟,可以很好地与Spring生态系统集成,支持基于...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...