`

springsecurity扩展自定义会话管理(一)控制用户重复登陆

 
阅读更多

springsecurity扩展自定义会话管理(一)控制用户重复登陆 

springsecurity有控制单账号只能在一个地方登陆的功能,后登陆用户将踢掉前登陆用户;或者限制账号重复登陆,一个账号没有退出,另外一个人想用这个账号就登陆不上。 

现在我想根据原有的这些功能参考,做一个管理员可以将某正在session中的用户踢出系统的功能。便于管理员修改了登陆用户的权限或者部门设置后,强制让该用户重新登录。 

主要参考了如下两篇文章: 
http://www.family168.com/oa/springsecurity/html/ch214-smart-concurrent.html 
http://www.blogjava.net/beyondwcm/archive/2009/05/08/269545.html 

主要涉及的类如下(我自己的山寨理解): 
HttpSessionEventPublisher             监听session创建和销毁 
ConcurrentSessionFilter                  每次有http请求时校验,看你当前的session是否是过期的 
SessionRegistryImpl                       存放session中的信息,并做处理 
ConcurrentSessionControllerImpl     用户登入登出的控制 
SessionInformation       存储session中信息的model 

先实现springsecurity文档上的,限制用户重复登陆,后登陆用户将前登陆用户冲掉 ,只需要在xml中配置如下: 
<authentication-manager alias="authenticationManager" 
session-controller-ref="currentController" /> 
<beans:bean id="concurrentSessionFilter"   class="org.springframework.security.concurrent.ConcurrentSessionFilter"> 
<custom-filter position="CONCURRENT_SESSION_FILTER" /> 
<beans:property name="sessionRegistry" ref="sessionRegistry" /> 
<!-- 踢出的用户转向的页面--> 
<beans:property name="expiredUrl" value="/user/user.action" /> 
<beans:property name="logoutHandlers"> 
   <beans:list> 
    <beans:bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" /> 
    <beans:bean 
     class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices"> 
     <beans:property name="key" value="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/> 
     <beans:property name="userDetailsService" ref="userDetailsService"/> 
    </beans:bean> 
   </beans:list> 
</beans:property> 
</beans:bean> 
<beans:bean id="sessionRegistry"   class="org.springframework.security.concurrent.SessionRegistryImpl" /> 
<beans:bean id="currentController" 
class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl"> 
<beans:property name="sessionRegistry" ref="sessionRegistry" /> 
<!-- true限制不允许第二个用户登录,false第二个登陆用户踢掉前一个登陆用户 --> 
<beans:property name="exceptionIfMaximumExceeded" value="false" /> 
<!-- 等第二种情况是,允许同时多少个用户同时登陆 --> 
<beans:property name="maximumSessions" value="2"/> 
</beans:bean> 

其中web.xml还需要添加: 
<!-- 登入和登出时对SessionRegistryImpl进行处理 --> 
<listener> 
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class> 
</listener> 

分享到:
评论

相关推荐

    spring security权限管理开发手册及实例.rar

    - **springsecurity-sample**:这个示例项目可能包含了从创建用户、角色到实现登录、权限控制的完整流程。你可以通过它学习如何配置Spring Security XML或Java配置,如何编写自定义的认证和授权逻辑,以及如何在...

    Spring-Security3.0自定义表结构

    在企业级应用开发中,Spring Security作为Spring框架的一个子项目,提供了一套完整的权限管理和安全性解决方案。它不仅能够处理身份验证(authentication)和授权(authorization),还提供了对加密、CSRF保护、会话...

    SpringSecurity笔记,编程不良人笔记

    6. **SpringSecurity扩展** - OAuth2:SpringSecurity支持OAuth2协议,实现第三方登录和API保护。 - JWT(JSON Web Tokens):可使用JWT进行状态less的认证,提高系统的可扩展性。 - CORS(Cross-Origin Resource...

    spring security 官方文档

    4. **会话管理(Session Management)**:Spring Security提供了强大的会话管理功能,可以限制同一用户同时在线的数量,检测会话劫持和会话固定攻击,并能实现会话超时策略。 5. **CSRF保护(Cross-Site Request ...

    spring security 3 demos

    Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架,广泛用于Java应用程序的安全管理,尤其是在Spring生态体系中。"Spring Security 3 Demos" 是一套针对Spring Security 3 版本的示例项目,旨在...

    spring_security_3.1

    4. **会话管理**:Spring Security提供了会话管理功能,如会话固定保护、会话超时和并发会话控制。这在防止会话劫持和会话固定攻击方面至关重要。 5. **CSRF(跨站请求伪造)防护**:Spring Security 3.1默认提供了...

    Spring Security 安全管理

    它涵盖了用户认证、授权、会话管理、CSRF 防护等多个方面,广泛应用于 Web 应用、微服务以及 RESTful API 的安全性控制。 1.1 Spring Security 核心概念 - **Authentication (认证)**:Spring Security 中的认证是...

    Spring Security 权限控制中文API

    6. **会话管理(Session Management)**:Spring Security 还提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 7. **CSRF(跨站请求伪造)防护**:默认情况下,...

    Spring Security 3 中文 chm

    6. **会话管理(Session Management)**:Spring Security 提供了会话管理功能,包括会话固定保护、会话超时和并发会话控制,防止会话劫持和会话固定攻击。 7. **CSRF(跨站请求伪造)防护**:Spring Security 自动...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    4. **处理登录和会话管理**:创建一个登录接口,用户可以通过这个接口提交凭证并获取JWT token。这个token将在后续的请求中携带,以证明用户的身份。同时,需要处理session管理和token的刷新,确保用户会话的安全性...

    精彩:Spring Security 演讲PPT

    随着Spring Security 2.x的发布,它提供了一种更为简洁且高效的方式来进行Web应用的安全管理。快速启动Spring Security 2.x,主要分为三个步骤: 1. **添加过滤器**: 在`web.xml`中加入`DelegatingFilterProxy`,...

    Spring Security 完整实例

    例如,可以创建一个名为`CustomUserDetailsService`的类,它连接到自定义的用户和角色表,查询用户信息,并将其转换为Spring Security的`UserDetails`对象。 **自定义登录页面** 默认的Spring Security登录页面是...

    Spring Security使用手册

    本使用手册详细介绍了Spring Security的配置和使用方法,包括使用命名空间配置的方式,实现用户权限的管理,自定义登陆页面,以及一些高级功能,如单点登录、防御会话伪造等。 在配置方面,Spring Security支持传统...

    spring security.rar

    4. **会话管理**:Spring Security提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并能控制单个用户的最大并发会话数量。 5. **CSRF保护**:Spring Security默认开启CSRF防护,通过生成并验证CSRF...

    SpringSecurity安全框架基础Demo

    它为基于Spring的应用程序提供了全面的安全服务,包括用户认证、角色权限管理、会话管理以及CSRF(跨站请求伪造)防护。这个"SpringSecurity安全框架基础Demo"旨在帮助开发者快速理解和实践Spring Security的核心...

    SpringSecurity源码

    SpringSecurity是Java领域中一款强大的安全框架,专为Spring应用设计,提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及CSRF防护等。本教程配套源码旨在帮助开发者深入理解SpringSecurity的工作原理...

    SpringSecurity中文文档.zip

    此外,SpringSecurity还提供了会话管理功能,包括会话固定保护(Session Fixation Protection)和会话超时(Session Timeout)等,以防止会话劫持和会话固定攻击。它还集成了Remember Me服务,允许用户在一定时间内...

    Spring security认证授权

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...

    spring security3 中文版本

    Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它提供了许多功能,包括登录表单、记住我功能、多身份验证器、基于注解的安全配置、CSRF 防护、OAuth2 客户端和服务端支持等。Spring Security ...

    SpringSecurity3.1.2控制一个账户同时只能登录一次

    文件`PmcPrincipal.java`可能包含一个自定义的用户主体类,它扩展了Spring Security的`Principal`接口。这个类可以包含额外的用户信息,如用户名、角色等,这些信息在处理会话控制时可能会用到。 3. **配置策略** ...

Global site tag (gtag.js) - Google Analytics