Shiro——会话管理

Shiro的会话实际上跟HTTPSession是一致的,都是表示客户端和服务器的一次会话。

一、Shiro的会话特点

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

二、会话相关的API

1、Subject.getSession():即可获取会话;其等价于Subject.getSession(true),即如果当前没有创建Session对象就会创建一个;Subject.getSession(false),如果当前没有创建Session则返回null。

2、session.getId():获取当前会话的唯一标识

3、session.getHost():获取当前Subject的主机地址

4、session.getTimeout() & session.setTimeout(毫秒):获取/设置当前session的过期时间

5、session.getStartTimestamp() & session.getLastAccessTime():获取会话的启动时间及最后访问时间。

6、session.touch() & session.stop():更新会话的最后访问时间及销毁时间;当Subject.logout()时会自动调用stop()方法来销毁会话。如果在web中,调用HttpSession.invalidate()也会自动调用Shiro Session.stop方法进行销毁Shiro的会话。

7、session.setAttribute(key,val) & session.getAttribute(key) & session.removeAttribute(key):设置/获取/删除会话属性,在整个会话范围内都可以对这些属性进行操作。

三、会话监听器

监听会话的创建,停止和过期事件。

SessionListener

      onStart(Session):void

      onStop(Session):void

      onExpiration(Session):void

 

四、Shiro的Session的使用

在Controller创建一个session并给session赋值
	@RequestMapping(value = "test")
	public String test(HttpSession session){
		session.setAttribute("testSession", "测试Shiro的session");
		shiroService.test();
		return "redirect:/list.jsp";
	}

在service中可以获取到session:
	@RequiresRoles({"admin"})
	public void test(){
		Session session = SecurityUtils.getSubject().getSession();
		System.out.println("Shiro Session:" + session.getAttribute("testSession"));
		System.out.println("ShiroService测试权限:" + new Date());
	}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值