shiro 的session持久化
对于分布式系统,一般都牵扯到Session共享问题,
而想实现Session共享,就要实现Session的持久化操作,即是将内存中的Session持久化至缓存数据库。
SessionDAO是Shiro提供的一个数据交互层的interface接口,其作用是可以将Session写入到数据库
中,然后可以对Session进行增删改查操作。
通过下面的UML图来看一下,Shiro为我们操作Session提供了哪些API。
其中SessionDao是最顶级的接口,它有一个简单的实现叫AbstractSessionDAO,而在AbstractSessionDAO下
又有两个实现类,分别是CachingSessionDAO和MemorySessionDAO,CachingSessionDAO提供了缓存的操作,
而MemorySessionDAO可以让我们在内存中操作Session。
而CachingSessionDAO是一个抽象类,它有一个简单的实现EnterpriseCacheSessionDAO,一般在开发过程中推荐大家直接继承EnterpriseCacheSessionDAO。
总结:
(1)AbstractSessionDAO
提供了SessionDAO的基础实现,如生成会话ID等。
(2)CachingSessionDAO
提供了对开发者透明的会话缓存的功能,需要设置相应的CacheManager。
(3)EnterpriseCacheSessionDAO
提供了缓存功能的会话维护,默认情况下使用MapCache实现,内部使用
ConcurrentHashMap保存缓存的会话。
一下是结合项目:
xml
<bean id="cluterShiroSessionDao" class="com.platform.shiro.CluterShiroSessionDao"/><bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"><!-- 设置session过期时间为1小时(单位:毫秒),默认为30分钟 --><property name="globalSessionTimeout" value="3600000"></property><property name="sessionValidationSchedulerEnabled" value="true"></property><property name="sessionIdUrlRewritingEnabled" value="false"></property><property name="sessionDAO" ref="cluterShiroSessionDao"/></bean>
CluterShiroSessionDao.java
public class CluterShiroSessionDao extends EnterpriseCacheSessionDAO {//创建Session(它实现了CachingSessionDAO接口的方法)@Overrideprotected Serializable doCreate(Session session) {Serializable sessionId = super.doCreate(session);final String key = Constant.SESSION_KEY + sessionId.toString();setShiroSession(key, session);return sessionId;}//根据sessionId读取session信息(它实现了CachingSessionDAO接口的方法)@Overrideprotected Session doReadSession(Serializable sessionId) {Session session = super.doReadSession(sessionId);if (null == session) {final String key = Constant.SESSION_KEY + sessionId.toString();session = getShiroSession(key);}return session;}//更新操作(它实现了CachingSessionDAO接口的方法)@Overrideprotected void doUpdate(Session session) {super.doUpdate(session);final String key = Constant.SESSION_KEY + session.getId().toString();setShiroSession(key, session);}//删除操作(它实现了CachingSessionDAO接口的方法)@Overrideprotected void doDelete(Session session) {super.doDelete(session);final String key = Constant.SESSION_KEY + session.getId().toString();J2CacheUtils.remove(key);}private Session getShiroSession(String key) {return (Session) J2CacheUtils.get(key);}private void setShiroSession(String key, Session session) {J2CacheUtils.put(key, session);}
}
转载于:https://www.cnblogs.com/zqyanywn/p/10845365.html
shiro 的session持久化相关推荐
- 基于shiro实现session持久化和分布式共享
前言 本文写下session持久化和分布式共享 基于shiro框架对session的管理机制来实现 必要性 一直处于登陆状态:你登陆微信 不可能三天两头就让你重新登陆吧?而是一直处于登陆状态 除非主动 ...
- 【Session】Tomcat中Session持久化到文件系统或数据库
参考的优秀文章 Tomcat Session 持久化 Package org.apache.catalina.session 最近同事在做Session外置的功能,我对Session持久化.共享也不太 ...
- servlet session持久化
1. session持久化是什么? web服务器把 session中存储的属性存储到本地磁盘或数据库中: 2.为什么需要持久化? 因为 session是服务器维护会话状态的对象,即便客户端关闭连接或 ...
- java 重写session_使用Shiro重写Session 自定义SESSION
引入shiro的jar包 1.2.3 org.apache.shiro shiro-core ${shiroVersion} org.apache.shiro shiro-web ${shiroVer ...
- java session 持久化_自定义实现session持久化
自定义实现session持久化 使用场景 对于有登录校验的网站,tomcat 重启之后,刷新页面又得重新登录,影响用户体验. 原因: tomcat 的session 在内存中,tomcat重启之后,内 ...
- 【Shiro】shiro的Session管理
[Shiro]shiro的Session管理 1. Session管理介绍 2. JavaSE环境下 3. JavaEE环境下 4. Session监听 5. Session检测 1. Session ...
- Shiro实现session限制登录数量踢人下线
Shiro实现session限制登录数量踢人下线 前言 实现 ■ 架构准备 ShiroConfig ■ redis内的存储分布 ■ 代码修改 修改 JedisSessionDAO 修改 SystemA ...
- Tomcat7 session 持久化关闭
Tomcat7 session 持久化关闭 tomcat 7默认开启session持久化功能,这样当你的tomcat重启之后,会自动重新加载session,这样当tomcat重启了保存在session ...
- Shiro中Session过期页面跳转回登录页面处理问题
Session超时的两种情况: shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时: 解决问题的思路:通过定 ...
最新文章
- 2007年下半年软考:网络工程师考试试题分析
- 文件复制函数的效率比较
- @async 默认线程池_Springboot线程池的使用和扩展
- PostgreSQL 12系统表(11)pg_user
- 我的世界服务器皮肤显示插件怎么用,我的世界皮肤和插件安装方法
- 边工作边刷题:70天一遍leetcode: day 56-1
- MyBatis 缓存原来是这么一回事儿!| 原力计划
- matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数
- python没基础能自学吗-50K大牛告诉你,没有任何编程基础,到底应该怎么自学Python...
- java数组实现队列
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 用BT3和spoonwep2研究学习WEP密码…
- android 4.4 root精灵,ROOT精灵: 支持安卓4.3/4.4机型一键ROOT
- opencv GPU加速 多GPU卡指定GPU索引方法
- 【云原生-白皮书】简章2:深入理解DevOps+微服务
- kubelet报错:Orphaned pod “$Pod“ found, but volume paths are still present on disk
- 如何给电脑硬盘分区?
- 游戏开发之路-hxx
- IntelliJ IDEA 小技巧之Bookmark(书签)的使用
- for循环和嵌套循环
热门文章
- 计算机二级在学校报还是外面报好,谁知道考计算机二级在哪个学校比较好啊?...
- oracle eco 开放接口,问题:关于ECO,ECN的API或者INTERFACE
- php in循环与for循环,详谈js中标准for循环与foreach(for in)的区别
- java线程 yield_Java线程中yield与join方法的区别
- linux怎样标识空设备,Linux系统命令------Ubuntu下解决adb设备列表为空
- 每天一个linux命令(20):find命令之exec
- 全卷积神经网路【U-net项目实战】LUNA 2016 数据集详解
- ftp服务器文件备份,数据备份是十分重要的,下面是通过ftp将本机数据备份到远程服务器的一个例子...
- 华三交换机升级的ipe文件_弱电工程工业以太网交换机电源故障总结
- svn上crlf怎么设置_svn如何设置svn:ignore