如何在grails Web应用程序中使用shiro本机会话?

时间:2011-11-20 21:50:05

标签: grails shiro session-management

目前,我在控制器和gsp页面中使用默认的HttpSession对象:

在控制器中:

...
session.mykey = anObject;  // adding an object to session
...
if (session.otherkey) {    // performing some checking

在GSP中:

...
<g:if test="${session.mykey}">
...

我想要一个“记住我”的功能。 Shiro已经内置了。但是,据我所知,为了做到这一点,我必须使用shiro本地会话模式(在Config.groovy:security.shiro.session.mode =“native”)。默认情况下,它会持久保存会话状态,因此只要Cookie过期或用户注销,对象就会保留在会话中。

我的理解是对的吗?

然后我必须将我的控制器更改为:

def shiroSession = SecurityUtils.subject.session
shiroSession.setAttribute("mykey",anObject)
....
if (shiroSession.getAttribute("otherkey") ){

我对此的看法:

<g:if test="${SecurityUtils.subject.session.getAttribute('mykey')}">

所以,我的问题是:

  • 是吗?
  • 我不能只使用以前的方式来访问会话吗?
  • 我是否必须在某些配置中关闭默认的http会话?

1 个答案:

答案 0 :(得分:1)

我放弃了在会话中持久保存对象(直到cookie过期)。这是我做的:

在控制器的登录方法中:

if (! session.currentProfile){
    Subject currentUser = SecurityUtils.getSubject()
if (currentUser.isRemembered()){
    boolean success = configureSession(session, currentUser.getPrincipal())
        if (success){
        ... 
        }
    }
    ....
}

第一个“if”检查会话是否具有我需要的对象。

configureSession方法在会话中输入我需要的所有信息。