(四) Session管理 --《springboot与shiro整合》
登录成功后使用Subject.getSession()即可获取会话;其等价于Subject.getSession(true),即如果当前没有创建Session对象会创建一个;
另外Subject.getSession(false),如果当前没有创建Session则返回null(不过默认情况下如果启用会话存储功能的话在创建Subject时会主动创建一个Session)。
JAVA代码
session.getId();
获取session唯一id
session.getHost();
获取当前Subject的主机地址,该地址是通过HostAuthenticationToken.getHost()提供的。
session.getTimeout(); session.setTimeout(毫秒);
获取/设置当前Session的过期时间;
session.getStartTimestamp(); session.getLastAccessTime();
获取会话的启动时间及最后访问时间
会话管理器
会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionsSecurityManager实现直接把会话管理委托给相应的SessionManager,DefaultSecurityManager及DefaultWebSecurityManager默认SecurityManager都继承了SessionsSecurityManager。
1.自定义SessionDao 持久化session 相关信息
@Component public class ShiroSessionDao extends CachingSessionDAO {@Autowiredprivate SessionDao sessionDao;@Overridepublic Serializable doCreate(Session session) {ShiroSession ss = new ShiroSession();Serializable sessionId = generateSessionId(session);assignSessionId(session, sessionId);ss.setSession(sessionId.toString());ss.setHost(session.getHost());sessionDao.createSession(ss);return sessionId;}@Overridepublic void doDelete(Session session) {Serializable sessionId = session.getId();sessionDao.deleteSession(sessionId.toString());}@Overrideprotected Session doReadSession(Serializable sessionId) {return super.getCachedSession(sessionId);}@Overrideprotected void doUpdate(Session session) {}}
2.配置SessionManager
//配置设置会话ID生成器, @Beanpublic JavaUuidSessionIdGenerator sessionIdGenerator(){return new JavaUuidSessionIdGenerator();}@Beanpublic SessionDAO getSessionDao(){ShiroSessionDao sessionDao = new ShiroSessionDao();sessionDao.setSessionIdGenerator(sessionIdGenerator());return sessionDao;}@Beanpublic SessionManager sessionManager(){SessionManager sessionManager = new SessionManager();ExecutorServiceSessionValidationScheduler scheduler = new ExecutorServiceSessionValidationScheduler();scheduler.setInterval(180000); scheduler.setSessionManager(sessionManager); sessionManager.setGlobalSessionTimeout(180000);sessionManager.setSessionValidationScheduler(scheduler);sessionManager.setSessionDAO(getSessionDao());return sessionManager;}@Beanpublic EhCacheManager cacheManager(){EhCacheManager cache = new EhCacheManager();cache.setCacheManagerConfigFile("classpath:ehcache.xml");return cache;}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());
securityManager.setSessionManager(sessionManager());
securityManager.setCacheManager(cacheManager());
return securityManager;
}
ExecutorServiceSessionValidationScheduler:会话验证调度器,定时检测会话是否过期 现在用户会话都会保存到数据库中,由ExecutorServiceSessionValidationScheduler定时检测是否过期
转载于:https://www.cnblogs.com/zls1218/p/8856347.html
(四) Session管理 --《springboot与shiro整合》相关推荐
- 《SpringBoot与Shiro整合-权限管理实战---从构建到模拟数据库登入》
<SpringBoot与Shiro整合-权限管理实战> ---- 从构建到模拟数据库登入 ---- 点击下载源码 ---- 或者查看? 文章目录 <SpringBoot与Shiro整 ...
- SpringBoot与Shiro整合-概述
主要讲解如何使用Spring Boot与Shiro进行整合使用,实现强大的用户权限管理,其中涉及如何完成用户认证(即用户登录),用户授权,thymeleaf页面整合shiro权限标签等知识点 Spri ...
- springboot 与shiro整合
shiro~ shiro快速入门 springboot 整合shiro 核心目标 清爽pom 用户认证授权认证,与数据库交互 shiro configuration 核心controller 获取sh ...
- 【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)
一.搭建SpringBoot开发环境 1. 安装好开发软件和Maven等 开发工具:Spring Tool Suite(TST) Maven :3.3.9 jdk:1.8 2. 创建springboo ...
- SpringBoot+Mybatis-Plus+Shiro整合的RBAC权限系统
Maven仓库: dependencies><dependency><groupId>org.springframework.boot</groupId>&l ...
- SpringBoot基于Shiro整合OAuth统一认证
修改配置文件application.yml
- 【Shiro】shiro的Session管理
[Shiro]shiro的Session管理 1. Session管理介绍 2. JavaSE环境下 3. JavaEE环境下 4. Session监听 5. Session检测 1. Session ...
- 基于SpringBoot的SSM整合案例 -- SpringBoot快速入门保姆级教程(四)
文章目录 前言 1.设计创建数据库表tbl_book 2.创建新的SpringBoot模块,勾选相关依赖 3. 添加SpringBoot创建项目时没有提供的相关坐标 4.根据数据库表创建实体类Book ...
- SpringBoot 优雅的整合 Shiro
Apache Shiro是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理.借助Shiro易于理解的API,您可以快速轻松地保护任何应用程序 - 从最小的移动应用程序到最 ...
- springBoot中shiro与Redis整合的配置文件
springBoot中shiro与Redis整合的配置文件 整合依赖: < ...
最新文章
- Redis三种特殊类型
- hpe服务器有哪些型号,HPE ProLiant DL80 Gen9 服务器 - 惠普服务器配置参数
- swap 将硬盘变内存
- JSTracker:前端异常数据采集
- linux下/proc/cpuinfo 文件分析
- C# 代码生成器 (存储过程生成方法)
- C#笔记(一):类型,泛型,集合
- Android UI 控件
- 渠道对账及差错处理系统设计
- 精致露营“风”,“吹”进小家电市场
- 小米最新系统android 10,小米新系统到来!基于Android Q的MIUI 10到底有哪些变化?小米9可尝鲜...
- 开源中国众包第三波阿里云悬赏项目,总金额 6 万
- WT2605-24SS音频解码芯片,实现宠物(玩具)喂食器远程更新语音技术方案解析
- Java --- 线程同步和异步的区别
- <汇编>七种寻址方式
- 空间分析与应用实验报告实验一燕麦试验田选址
- 2021华数杯C题总结
- MyBatis中的#和$之间的区别
- 想开水果店但是没有经验,想开水果店没有经验怎么办
- 利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果