`

spring security session-management

 
阅读更多

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 3.x session-management 会话管理失效

    - 在Spring Security的XML配置文件中,`&lt;http&gt;`元素下的`&lt;session-management&gt;`用于配置会话管理。例如,可以添加`&lt;concurrency-control&gt;`子元素来设置并发会话策略。 - `&lt;session-management&gt;`还可以配置`...

    spring-boot-security

    5. **会话管理(Session Management)**:Spring Security可以控制会话的创建、销毁以及会话固定攻击(Session Fixation)防护。默认情况下,Spring Security会自动处理会话管理。 6. **密码加密(Password ...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    3. **Session Management**: 提供了会话管理策略,如防止会话固定攻击(session fixation)、会话超时检测以及单点登录(Single Sign-On, SSO)支持。 4. **CSRF Protection**: 为了防止跨站请求伪造(Cross-Site ...

    Spring security-包含官方文档

    7. **Session Management**:Spring Security 可以控制会话的最大并发数量,防止会话固定攻击,并提供会话超时和会话劫持的防护。 8. **国际化**:Spring Security 支持多语言,可以在认证失败和权限不足时显示不同...

    spring-security-3.1.0.RELEASE

    2. **Session Management**:Spring Security提供了丰富的会话管理功能,包括会话固定攻击防御、会话超时检测等。 3. **频道安全**:通过HttpSessionFixationProtectionStrategy,防止会话劫持,强制重置会话ID。 ...

    spring-security源代码

    - **Session Management**:管理用户会话,防止会话固定攻击和并发会话控制。 2. **认证流程**: 认证流程在Spring Security中分为以下步骤: - 用户提交登录信息。 - `AuthenticationManager`验证用户凭证。 ...

    spring-security-3.1.0.RELEASE.zip

    4. **Session Management** - **Session Fixation Protection**: 防止会话固定攻击,确保用户会话的安全性。 - **Session Timeout**: 自动结束未活动的会话,提高安全性。 5. **CSRF防护** - Spring Security...

    spring-security-4.2.0.RELEASE-dist

    4. **会话管理(Session Management)**:Spring Security提供了一套完整的会话管理机制,包括会话固定保护(Session Fixation Protection)、会话超时检测以及单会话约束(防止同一用户同时登录多个设备)。...

    spring-security 官方文档 中文版

    Spring Security 是一款基于 Spring 框架的安全插件,提供了完整的安全性解决方案,包括身份认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。Spring Security 的设计目标是为...

    crafter-profile-spring-security-provider-2.3.3.zip

    5. **会话管理(Session Management)**:Spring Security提供会话管理功能,可以防止会话固定攻击(Session Fixation)和并发会话控制(Concurrent Session Control)。 6. **密码存储与加密(Password Storage & ...

    Spring Security2中设置Cookie的保存时间

    在Spring Security 2中,配置Cookie的保存时间是一项重要的任务,因为这关乎到用户的会话持久性和安全性。Cookie是Web应用程序中用于存储用户状态的一种机制,例如登录信息、个性化设置等。正确设置Cookie的生命周期...

    spring-security-3.1.0

    4. **会话管理(Session Management)** - **会话固定保护(Session Fixation Protection)**:防止会话劫持攻击,通过新创建会话来防止恶意用户利用已知会话ID。 - **会话超时(Session Timeout)**:可以设置...

    spring-security-4.2.3.RELEASE.zip 官网下载

    6. **Session Management**:Spring Security还提供了强大的会话管理功能,包括会话固定保护、会话超时、会话并发控制等。 在4.2.3.RELEASE版本中,可能包含以下关键改进和修复: - **Bug Fixes**:修复了该版本前...

    spring-security-3.2.3.RELEASE-dist

    《Spring Security 3.2.3.RELEASE:企业级安全框架深度解析》 Spring Security是Java平台上广泛使用的安全框架,其3.2.3.RELEASE版本是该框架的一个稳定版本,为开发者提供了全面的安全控制,从Web应用到企业级服务...

    Spring+Security-3.0.1+Spring+Security的三种实现方式

    - **Session Management**:会话管理功能,包括会话固定防护、会话超时检测和并发会话控制。 - **CSRF防护**:防止跨站请求伪造攻击,Spring Security提供了一套完整的解决方案,包括生成和验证CSRF令牌。 - **...

    Spring-Security_java_

    7. **Session Management**: 该组件管理用户会话,防止会话固定攻击和会话劫持。它可以限制同一用户同时在线的会话数量,或者设置会话超时。 **Spring Security 配置与扩展** Spring Security 提供了 XML 和 Java ...

    Spring-security

    6. **Session Management**: 管理用户的会话,可以防止会话固定、会话超时等问题,增加安全性。 7. **CSRF Protection**: 自动集成CSRF防护,防止恶意第三方在用户浏览器上模拟提交表单。 8. **Remember Me**: ...

    spring security 3.1获取所有已登录用户的终极方案

    在这个文件中,我们需要确保`sessionManagement`元素配置了`sessionRegistryBean`,以便Spring Security可以自动将新登录的用户信息注册到SessionRegistry: ```xml &lt;!-- ... --&gt; &lt;session-management&gt; ...

    spring-security-3.0.7.RELEASE.zip

    Spring Security旨在提供认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等核心功能。在3.0.7.RELEASE版本中,该框架已经相当成熟,可以很好地与Spring生态系统集成,支持基于...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

Global site tag (gtag.js) - Google Analytics