当前位置: 代码迷 >> Web前端 >> Apache Shiro Web使用会话管理
  详细解决方案

Apache Shiro Web使用会话管理

热度:451   发布时间:2013-02-05 10:40:57.0
Apache Shiro Web应用会话管理

Servlet容器会话管理

Web环境中,Shiro默认的会话管理器SessionManager 的实现是ServletContainerSessionManager。这个实现只是简单的封装了Servlet容器,包括会话集群功能。它的本质是Shiro Session APIServlet容器之间的一个桥梁。

使用这个默认实现的好处是,应用程序将使用现有的servlet容器的会话配置,例如超时,基于特定容器的集群机制等。缺点是你的应用程序依赖于特定servlet容器的会话处理将不适合移植。

如果使用缺省的servlet容器配置,在Web.xml文件里可配置Session超时。例如:

<session-config>

  <!-- web.xml expects the session timeout in minutes: -->

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

</session-config>

本地会话管理

如果你想要特定的会话管理/集群功能,并且可以在不同的servlet容器移植。你可以Shiro本地的会话管理。“本地”的意思是Shiro自己实现的企业级会话管理支持所有的SubjectHttpServletRequest会话。但请放心,Shiro实现的会话管理符合servlet规范,现有的Web/HTTP相关代码不需要修改。

如想使用Shiro本地的会话管理,需要在shiro.ini进行配置:

[main]

...

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager

# configure properties (like session timeout) here if desired

# Use the configured native session manager:

securityManager.sessionManager = $sessionManager

一旦声明,你就可以配置DefaultWebSessionManager的实例,配置方法可参考“会话管理”部分中所描述的集群配置与本地会话选项。

比如,session超时设置:

[main]

...

# 3,600,000 milliseconds = 1 hour

securityManager.sessionManager.globalSessionTimeout = 3600000

DefaultWebSessionManager支持两种配置特性的Session Cookie

l sessionIdCookieEnabled (a boolean)

l sessionIdCookie, a Cookie instance.

DefaultWebSessionManager的sessionIdCookie缺省实例是SimpleCookie。这个实现符合JavaBeans风格的属性配置,可以让所有相关的属性配置成一个Http Cookie。例如,你可以设置Cookie域:

[main]

...

securityManager.sessionManager.sessionIdCookie.domain = foo.com

Cookie的默认名称是JSESSIONID。此外,Shirocookie支持HttpOnly flag。

如果你不想使用会话cookie,你可以将sessionIdCookieEnabled的属性设置为false。例如:

[main]

...

securityManager.sessionManager.sessionIdCookieEnabled = false


  相关解决方案