springsecurity扩展自定义会话管理(一)控制用户重复登陆
来源:互联网 发布:21天学通java知乎 编辑:程序博客网 时间:2024/04/27 01:46
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>
- springsecurity扩展自定义会话管理(一)控制用户重复登陆
- springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)
- springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)
- spring security 3.1.0 控制用户重复登陆
- SpringSecurity(四):自定义登陆认证实现手机号登陆
- Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
- SpringSecurity自定义用户认证逻辑(二)
- token控制重复登陆
- 防止用户重复登陆
- ASIHTTPRequest用户登陆:重复用户登陆问题解决
- ASIHTTPRequest用户登陆:重复用户登陆问题解决
- 会话管理一:概述
- SpringSecurity实战! 详细讲解如何通过SpringSecurity控制用户访问权限。
- 在线登陆用户管理
- 防止用户重复登陆系统
- 防止用户重复登陆系统
- 防止用户重复登陆系统
- 如何防止用户重复登陆
- 实模式与保护模式(转)
- 下載資源
- GHOST 所有参数大全
- 【转】Android.mk的用法和基础
- Adding a Custom System Call to Ubuntu Linux in [C]
- springsecurity扩展自定义会话管理(一)控制用户重复登陆
- 禁止批处理中的某一条命令回显结果(批处理中的sleep)
- php网络状态代码判定
- linux下top命令参数解释
- 今天是2010年9月8日
- cocoa内存管理注意事项
- CPerson
- 用动态SQL. 查询
- Android-Notification的使用