第十章 会话管理(一) 会话

Shiro 提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE 还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web 的透明支持、SSO 单点登录的支持等特性。即直接使用Shiro 的会话管理可以直接替换如Web 容器的会话管理。

所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。


Shiro 的会话支持不仅可以在普通的JavaSE 应用中使用,也可以在JavaEE应用中使用,如web应用。且使用方式是一致的。

login("classpath:shiro.ini", "zhang", "123");
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();

登录成功后使用Subject.getSession()即可获取会话;其等价于Subject.getSession(true),即如果当前没有创建Session 对象会创建一个;另外Subject.getSession(false),如果当前没有创建Session 则返回null(不过默认情况下如果启用会话存储功能的话在创建Subject 时会主动创建一个Session)。

Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();
/*
 * 获取当前会话的唯一标识。
 */
Serializable id = session.getId();
/*
 * 获取当前Subject的主机地址,该地址是通过HostAuthenticationToken.getHost()提供的。
 */
String host = session.getHost();
/*
 * 获取/设置当前Session的过期时间;如果不设置默认是会话管理器的全局过期时间。
 */
long timeOut = session.getTimeout();//当前Session的过期时间
/*
 * 获取会话的启动时间及最后访问时间;
 * 如果是JavaSE应用需要自己定期调用session.touch()去更新最后访问时间;
 * 如果是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。
 */
Date startTime = session.getStartTimestamp();
Date lastTime = session.getLastAccessTime();
/*
 * 更新会话最后访问时间及销毁会话;
 * 当Subject.logout()时会自动调用stop 方法来销毁会话。
 * 如果在web中,调用javax.servlet.http.HttpSession. invalidate()也会自动调用Shiro Session.stop方法进行销毁Shiro 的会话。
 */
session.touch();
session.stop();
/*
 * 设置/获取/删除会话属性;在整个会话范围内都可以对这些属性进行操作。
 */
session.setAttribute("key", 123);
String val = (String) session.getAttribute("key");
session.removeAttribute("key");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值