shiro在Web环境中对会话的支持

缺省Http会话

对于Web应用,Shiro缺省将使用我们习以为常的Servlet容器会话作为其会话基础设施。即,当你调用subject.getSession()和subject.getSession(boolean)方法时,Shiro会返回Servlet容器的HttpSession实例支持的Session实例。这种方式的曼妙之处在于调用subject.getSession()的业务层代码会跟一个Shiro Session实例交互 - 还没有“认识”到它正跟一个基于Web的HttpSession打交道。这在维护架构层之间的清晰隔离时,是一件非常好的事情。

Web层中Shiro的原生会话

如果你由于需要Shiro的企业级会话特性(如容器无关的集群)而打开了Shiro的原生会话管理,你当然希望HttpServletRequest.getSession()和HttpSession API能和“原生”会话协作,而非Servlet容器会话。如果你不得不重构所有使用HttpServletRequest和HttpSession API的代码,使用Shiro的Session API来替换,这将非常令人沮丧。Shiro当然从来不会期望你这么做。相反,Shiro完整实现了Servlet规范中的Session部分以在Web应用中支持原生会话。这意味着,不管何时你使用相应的HttpServletRequest或HttpSession方法调用,Shiro都会将这些调用委托给内部的原生会话API。结果,你无需修改Web代码,即便是你正在使用Shiro的‘原生’企业会话管理 - 确实是一个非常方便(且必要)的特性。

你可能感兴趣的:(shiro在Web环境中对会话的支持)