Apache Shiro安全框架(5)-会话管理和缓存

本文详细介绍了Apache Shiro的会话管理,包括会话的创建、删除、验证和失效,以及Session的CURD操作。Shiro通过SessionManager接口管理会话,支持自定义SessionDAO实现会话的持久化。此外,还探讨了Shiro的缓存管理,包括自定义CacheManager以集成Redis实现缓存。通过配置SecurityManager,可以实现会话管理和高效的缓存策略。
摘要由CSDN通过智能技术生成

会话

会话,即用户保持和服务端之间的联系,保证用户在下一次访问服务端时不必在提交用户身份信息。而服务端可以通过用户提交的sessionId判断用户身份。

Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession()

可以通过以上方法获取当前登录用

/**
 *Subject.getSession(true),即如果当前没有创建session对象会创建一个;
 *Subject.getSession(false),如果当前没有创建session对象则返回null。
*/
Subject.getSession();//等价于Subject.getSession(true)

session.getId();//获取当前会话的唯一标识。

session.getHost();//获取当前会话的主机地址。

session.getTimeout() & session.setTimeout(毫秒);//设置/获取当前Session的过期时间。

/**获取会话的启动时间及最后访问时间;
 *如果是J2SE环境需要自己定期调用session.touch()去更新最后访问时间;
 *如果是Web环境,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。
*/
session.getStartTimestamp() & session.getLastAccessTime();

/**
 *更新会话最后访问时间以及销毁会话;
 *Subject.logout()会自动调用session.stop()。
 *在Web应用中,调用HttpSession.invalidate()也会自动调用session.stop()来销毁shiro的会话。
*/
session.touch() & session.stop();

session.setAttribute(key,val) & session.getAttribute(key) & session.removeAttribute(key);//设置/获取/删除 会话属性。


会话管理

shiro中的会话管理器管理所有Subject的会话的创建、删除、验证、失效等。shiro中会话管理的结构图如下:


发现SecurityManager继承了SessionManager接口,而SecurityManager结构图如下:


发现SessionSecurityManager实现了接口SecurityManager,实质SessionSecurityManager实现了把会话管理委托给对应的SessionManager。而DefaultSecurityManager和DefaultWebSecurityManager都继承了SessionSecurityManager

会话监听器

自定义类实现SessionListener接口,并实现其中的方法。SessionListener方法如下:

  • onStart(Session):创建会话时触发该事件
  • onStop(Session):销毁会话时触发该事件
  • onExpiration(Session):会话过期时触发该事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值