6

現在、コントローラーとgspページの両方でデフォルトのHttpSessionオブジェクトを使用しています。

コントローラの場合:

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

GSPの場合:

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

「rememberme」機能が欲しいのですが。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セッションをオフにする必要がありますか?
4

1 に答える 1

1

オブジェクトをセッションに永続的に保持することをあきらめました (Cookie の有効期限が切れるまで)。これが私がしたことです:

コントローラーの login メソッドで:

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

最初の「if」は、セッションに必要なオブジェクトがあるかどうかを確認します。

configureSession メソッドは、必要なすべての情報をセッションに入れます。

于 2011-11-25T00:15:13.180 に答える