文档章节

第 12 章 管理会话

jj_soft
 jj_soft
发布于 2016/06/04 15:24
字数 642
阅读 6
收藏 0

转载:http://www.mossle.com/docs/auth/html/ch102-concurrent-session.html

第 12 章 管理会话

多个用户不能使用同一个账号同时登陆系统。

12.1. 添加监听器

在web.xml中添加一个监听器,这个监听器会在session创建和销毁的时候通知Spring Security。

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
        

这种监听session生命周期的监听器主要用来收集在线用户的信息,比如统计在线用户数之类的事。有关如何自己编写listener统计在线用户数,可以参考:http://www.mossle.com/docs/jsp/html/jsp-ch-08.html

12.2. 添加过滤器

在xml中添加控制同步session的过滤器。

<http auto-config='true'>
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    <session-management>
        <concurrency-control />
    </session-management>
</http>
        

12.3. 控制策略

12.3.1. 后面的用户禁止登陆

默认情况下,如果有一个人使用了一个账号登录了系统,其他人就不能再用这个账号登录了。

这个参数用来控制是否在会话数目超过最大限制时抛出异常,默认值是false,也就是不抛出异常,而是把之前的session都销毁掉,所以之前登陆的用户就会被踢出系统了。

现在我们把这个参数改为true,再使用同一个账号同时登陆一下系统,看看会发生什么现象。

禁止同一账号多次登录

图 12.1. 禁止同一账号多次登录


很好,现在只要有一个人使用user/user登陆过系统,其他人就不能再次登录了。这样可能出现一个问题,如果有人登陆的时候因为某些问题没有进行logout就退出了系统,那么他只能等到session过期自动销毁之后,才能再次登录系统。

12.3.2. 后登陆的将先登录的踢出系统

如果希望后登陆的用户会把先登录的用户踢出系统,需要为concurrent-session-control设置一个参数。

<http auto-config='true'>
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    <concurrent-session-control exception-if-maximum-exceeded="false"/>
</http>
            

想测试一下的话,先打开firefox使用user/user登陆系统,然后再打开ie使用user/user登陆系统。这时ie下的user用户会登陆成功,进入登陆成功页面。而firefox下的用户如何刷新页面,就会显示如下信息:

This session has been expired (possibly due to multiple concurrent logins being attempted as the same user).

这是因为先登录的用户已经被强行踢出了系统,如果他再次使用user/user登陆,ie下的用户也会被踢出系统了。

© 著作权归作者所有

上一篇: HQL的检索方式
jj_soft
粉丝 1
博文 96
码字总数 74097
作品 0
广州
程序员
私信 提问
Apache Shiro 安全框架 指南 1.0 发布

开源电子书《跟我学Apache Shiro安全框架》 Apache Shiro是一个简单强大的Java安全框架,为了让更多人了解并使用该框架,利用业余时间写了此教程,希望能帮助使用该框架的朋友。因为时间仓促...

闲大赋
2014/04/20
5.8K
33
IdentityModel 中文文档(v1.0.0) 目录

欢迎使用IdentityModel文档! 第一部分 协议客户端库 第1章 发现端点(Discovery Endpoint) 第2章 授权端点(Authorize Endpoint) 第3章 结束会话端点(EndSession Point) 第4章 令牌端点(Toke...

ThinksJay
04/28
0
0
《跟我学Shiro》系列教程PDF完结版下载

Shiro目录 第一章 Shiro简介 第二章 身份验证 第三章 授权 第四章 INI配置 第五章 编码/加密 第六章 Realm及相关对象 第七章 与Web集成 第八章 拦截器机制 第九章 JSP标签 第十章 会话管理 ...

HenrySun
2016/10/09
797
0
《Oracle数据库基础与应用教程》一本Oracle入门教材

《Oracle数据库基础与应用教程》书全面讲述了Oracle数据库的日常管理工作内容。全书共14章,包含Oracle简介和安装、Oracle客户端、管理Oracle环境、Oracle体系结构、管理Oracle存储结构、SQL...

airfish2000
2016/08/30
0
0
再次提问,php基础问题,会话变量。

我的书本在23章的时候清楚的讲解了会话变量,还有一个验证登录演示。看起来无压力。 但是在第28章的时候彻底歇菜了,看不懂了,请oschina前辈们指点一二。虽然我这本书的代码不太好,但是学习...

Helloall
2014/06/02
362
6

没有更多内容

加载失败,请刷新页面

加载更多

JS实现使用Math.random()函数生成n到m间的随机数字

Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n...

张兴华ZHero
29分钟前
4
0
入门了解Service Mesh + Istio?从本文开始

下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio、Windows容器、集群模板等功能及使用,还有k3s首次线下workshop,由R...

RancherLabs
30分钟前
6
0
Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓...

honeymoose
32分钟前
5
0
二维码插件之qrcode.min.js

文件链接百度云地址 https://pan.baidu.com/s/1nWiBuT4Z7WOAMoUEFL8PZg 入门 http://www.jq22.com/jquery-info294 使用jquery.qrcode.min.js实现前台二维码生成(带Logo) https://blog.csd......

木九天
41分钟前
4
0
开源 java CMS - FreeCMS2.8 自定义标签 commentPage

项目地址:http://www.freeteam.cn/ commentPage 根据参数提取评论对象。 参数 说明 siteid 站点id objtype 评论对象类型 objid 评论对象id membername 会员名称 isanonymous 是否匿名 1是 ...

freeteam
42分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部