shiro会话管理示例代码
副标题[/!--empirenews.page--]
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web的透明支持、SSO单点登录的支持等特性。即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理。 会话 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。 Shiro的会话支持不仅可以在普通的JavaSE应用中使用,也可以在JavaEE应用中使用,如web应用。且使用方式是一致的。 Java代码 login("classpath:shiro.ini","zhang","123"); Subject subject = SecurityUtils.getSubject(); Session session = subject.getSession(); 登录成功后使用 Java代码 session.getId(); 获取当前会话的唯一标识。 Java代码 session.getHost(); 获取当前Subject的主机地址,该地址是通过HostAuthenticationToken.getHost()提供的。 Java代码 session.getTimeout(); session.setTimeout(毫秒); 获取/设置当前Session的过期时间;如果不设置默认是会话管理器的全局过期时间。 Java代码 session.getStartTimestamp(); session.getLastAccessTime(); 获取会话的启动时间及最后访问时间;如果是JavaSE应用需要自己定期调用session.touch()去更新最后访问时间;如果是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。 Java代码 session.touch(); session.stop(); 更新会话最后访问时间及销毁会话;当Subject.logout()时会自动调用stop方法来销毁会话。如果在web中,调用javax.servlet.http.HttpSession. invalidate()也会自动调用Shiro Session.stop方法进行销毁Shiro的会话。 Java代码 session.setAttribute("key","123"); Assert.assertEquals("123",session.getAttribute("key")); session.removeAttribute("key"); 设置/获取/删除会话属性;在整个会话范围内都可以对这些属性进行操作。 Shiro提供的会话可以用于JavaSE/JavaEE环境,不依赖于任何底层容器,可以独立使用,是完整的会话模块。 会话管理器 会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionsSecurityManager实现直接把会话管理委托给相应的SessionManager,DefaultSecurityManager及 SecurityManager提供了如下接口: Java代码 Session start(SessionContext context); //启动会话 Session getSession(SessionKey key) throws SessionException; //根据会话Key获取会话 另外用于Web环境的WebSessionManager又提供了如下接口: Java代码 boolean isServletContainerSessions();//是否使用Servlet容器的会话 Shiro还提供了ValidatingSessionManager用于验资并过期会话: Java代码 void validateSessions();//验证所有会话是否过期 Shiro提供了三个默认实现: DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE环境; DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理。 替换SecurityManager默认的SessionManager可以在ini中配置(shiro.ini): Java代码 [main] sessionManager=org.apache.shiro.session.mgt.DefaultSessionManager securityManager.sessionManager=$sessionManager Web环境下的ini配置(shiro-web.ini): <!--EndFragment--> (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |