Shiro会话管理和加密

会话管理

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

会话相关API

Subject.getSession():获取会话,等价于 Subject.getSession(true),即如果当前没有创建 session 对象会创建一个;Subject.getSession(false),如果当前没有创建 session 对象则返回 null。
session.getId():获取当前会话的唯一标识。
session.setAttribute(key,val) :设置会话属性。
session.getAttribute(key) :获取会话属性。
session.removeAttribute(key):删除会话属性。
SessionDAO
Shiro 提供 SessionDao 用于会话持久化。提供 CRUD 操作。

AbstractSessionDAO 提供了 SessionDAO 的基础实现,如生成会话 ID 等。
CachingSessionDAO 提供了对开发者透明的会话缓存的功能,需要设置相应的 CacheManager。
MemorySessionDAO 直接在内存中进行会话维护。
EnterpriseCacheSessionDAO 提供了缓存功能的会话维护,默认情况下使用 MapCache 实现,内部使用 ConcurrentHashMap 保存缓存的会话。
在实际开发中,如果要用到 SessionDAO 组件,可以自定义类实现自 EnterpriseCacheSessionDAO 类,为其注入 sessionIdGenerator 属性,如果用到缓存的话还可以注入一个缓存的名字。最后将这个 SesionDAO 组件注入给 SessionManager(会话管理器),最后将 SessionManager 配置给 SecurityManager。会话使用
建议在开发中,Controller 层使用原生的 HttpSession 对象,在 Service 层中使用 Shiro 提供的 Session 对象。如果在 Service 层中使用 HttpSession 对象,那么属于侵入式,并不建议这么做。Shiro 提供的 Session 能够很好的解决这个问题。那么,问题来了,两种方式获取的 session 是否相同呢?在 Controller 中,通过 request.getSession() 获取会话 session ,该 session 到底来源于ServletRequest 还是由 Shiro 管理并创建的会话,主要由安全管理器 SecurityManager 和SessionManager 会话管理器决定。在使用默认 SessionManager 会话管理器的情况下,不管是通过 request.getSession() 或者 subject.getSession() 获取到 session,操作 session,两者都是等价的,请大家放心使用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值