今天一起探讨shiro实现账户同一时刻session唯一
今天和同事在一起探讨shiro如何实现一个账户同一时刻只有一session存在的问题,下面小编把核心代码分享到博客园平台,需要的朋友参考下http://m.0834jl.com
今天遇到一个项目问题,shiro如何实现一个账户同一时刻只有一session存在的问题,找了几篇文章,在这里就把核心的代码理了理,具体情况如下。
1.假设你使用了Apache shrio ,项目要求一个账户同一时刻只能有一个用户存在,那么你就应该在你的shiro配置文件中添加以下代码:
接下来你就应该在你的realm中添加下面的代码,这里主要是为了判断用户登录的账户是否已经登录过了。
@Autowired private SessionDAO sessionDAO; ...............
接下来你就应该在realm中得到shiro 的缓存中得到所有的已经登录的账户,进行判断当前用户是否已经登录
//apache shiro获取所有在线用户 Collection sessions = sessionDAO.getActiveSessions(); for(Session session:sessions){ String loginUsername = String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));//获得session中已经登录用户的名字 if(username.equals(loginUsername)){ //这里的username也就是当前登录的username session.setTimeout(0); //这里就把session清除, } }
2.SessionManager
这里有个可能出现bug的地方,可以通过配置sessionIdCookie属性,解决被服务器重写cookie中会话ID
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中split大文件分割和cat合并文件详解
- centos下安装配置phpMyAdmin的方法步骤
- ubuntu中python调用C/C++方法之动态链接库详解
- linux下cat命令连接文件并打印到标准输出设备上
- 详解Linux误删用户家目录的恢复方法
- Linux下sshd服务及服务管理命令详解
- 关于CentOS 7下sqlite3找不到的问题解决
- 宝塔Linux面板之好用免费的中文Linux VPS主机控制面板适合快速建站
- Linux中openssl/opensslv.h找不到问题的解决方法
- CentOS7 安装 PostgreSQL11的方法步骤
- Linux中FTP服务器的搭建教程
- ubuntu下编译安装opencv的方法
- CentOS7如何执行PHP定时任务详解
- linux中ssh免密通信的实现
- Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法