加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_盐城站长网 (https://www.0515zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

shiro会话管理示例代码

发布时间:2020-12-24 08:15:59 所属栏目:创业 来源:网络整理
导读:副标题#e# Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web的透明支持、SSO单点登录的支持等特性

Java代码  

[main] 
sessionManager=org.apache.shiro.web.session.mgt.ServletContainerSessionManager 
securityManager.sessionManager=$sessionManager 

另外可以设置会话的全局过期时间(毫秒为单位),默认30分钟:

Java代码  

sessionManager. globalSessionTimeout=1800000 

默认情况下globalSessionTimeout将应用给所有Session。可以单独设置每个Session的timeout属性来为每个Session设置其超时时间。

另外如果使用ServletContainerSessionManager进行会话管理,Session的超时依赖于底层Servlet容器的超时时间,可以在web.xml中配置其会话的超时时间(分钟为单位): 

Java代码  

<session-config> 
 <session-timeout>30</session-timeout> 
</session-config> 

在Servlet容器中,默认使用JSESSIONID Cookie维护会话,且会话默认是跟容器绑定的;在某些情况下可能需要使用自己的会话机制,此时我们可以使用DefaultWebSessionManager来维护会话:

Java代码  

sessionIdCookie=org.apache.shiro.web.servlet.SimpleCookie 
sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
sessionIdCookie.name=sid 
#sessionIdCookie.domain=sishuok.com 
#sessionIdCookie.path= 
sessionIdCookie.maxAge=1800 
sessionIdCookie.httpOnly=true 
sessionManager.sessionIdCookie=$sessionIdCookie 
sessionManager.sessionIdCookieEnabled=true 
.securityManager.sessionManager=$sessionManager 

sessionIdCookie是sessionManager创建会话Cookie的模板:

sessionIdCookie.name:设置Cookie名字,默认为JSESSIONID;

sessionIdCookie.domain:设置Cookie的域名,默认空,即当前访问的域名;

sessionIdCookie.path:设置Cookie的路径,默认空,即存储在域名根下;

sessionIdCookie.maxAge:设置Cookie的过期时间,秒为单位,默认-1表示关闭浏览器时过期Cookie;

sessionIdCookie.httpOnly:如果设置为true,则客户端不会暴露给客户端脚本代码,使用HttpOnly cookie有助于减少某些类型的跨站点脚本攻击;此特性需要实现了Servlet 2.5 MR6及以上版本的规范的Servlet容器支持;

sessionManager.sessionIdCookieEnabled:是否启用/禁用Session Id Cookie,默认是启用的;如果禁用后将不会设置Session Id Cookie,即默认使用了Servlet容器的JSESSIONID,且通过URL重写(URL中的“;JSESSIONID=id”部分)保存Session Id。

 另外我们可以如“sessionManager. sessionIdCookie.name=sid”这种方式操作Cookie模板。 

会话监听器

会话监听器用于监听会话创建、过期及停止事件: 

Java代码  

public class MySessionListener1 implements SessionListener { 
 @Override 
 public void onStart(Session session) {//会话创建时触发 
  System.out.println("会话创建:" + session.getId()); 
 } 
 @Override 
 public void onExpiration(Session session) {//会话过期时触发 
  System.out.println("会话过期:" + session.getId()); 
 } 
 @Override 
 public void onStop(Session session) {//退出/会话过期时触发 
  System.out.println("会话停止:" + session.getId()); 
 } 
} 

如果只想监听某一个事件,可以继承SessionListenerAdapter实现:

(编辑:网站开发网_盐城站长网 )

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读