2011-11-20 52 views
6

目前,我使用的是默認的HttpSession對象在兩個控制器和GSP頁面:如何在grails web應用程序中使用shiro本地會話?

在控制器:

... 
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

你不需要本地會話來使用「記住我」。 – user852518

+0

你有什麼建議?你能指點我一些鏈接嗎?在閱讀本文後,我嘗試了本地會話:http://grails.1312388.n4.nabble.com/Forcing-authentication-of-user-in-Grails-filter-using-Shiro-tp3698679p3702316.html – r0drigopaes

+0

From:https: //grails.org/plugin/shiro按照慣例查看訪問控制。你只需在''SecurityUtils.groovy'''中設置'''accessControl(auth:false)'''。如果您正確傳遞rememberMe標誌,該工作。 –

回答

1

我放棄了在會話中保持對象(直到cookie過期)。這裏是我做的:

在控制器中的登錄方法:

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

第一次會議的「如果」檢查是否有我需要的對象。

configureSession方法在會話中放入我需要的所有信息。

相關問題