2012-01-16 53 views
2

WebアプリケーションでApache Shiroを使用しています。ログインと認証チェックがうまく動作しますが、私はログアウト/再ログインメカニズムを実装するために問題を抱えている:Shiro:セッションは既に無効にされています

private void logout(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
      log.debug("do logout"); 
      Subject subject = SecurityUtils.getSubject(); 
      subject.logout(); 
      resp.sendRedirect("end.html"); 
    } 

しかし、ログアウトして再ログイン後、私は次を得る:ログアウトは、サーブレットで行われますエラー:

org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: 
    getAttribute: Session already invalidated 
    at org.apache.shiro.web.session.HttpServletSession.removeAttribute(HttpServletSession.java:167) 
at org.apache.shiro.session.ProxiedSession.removeAttribute(ProxiedSession.java:135) 
at org.apache.shiro.subject.support.DelegatingSubject.clearRunAsIdentities(DelegatingSubject.java:424) 
at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:246) 

ログインは次のように行われている(UIコンポーネントの方法で、私はUIフレームワークとしてZKを使用):

private void tryLogin(UsernamePasswordToken token) { 
     Subject subject = SecurityUtils.getSubject(); 
     try { 
       subject.login(token); 
       ... 

私は、ログアウトなどの例外を理解していませんfr om shiroはセッションを無効にし、再ログインは新しいセッションにアクセスする必要があります。ヘルプ

答えて

3

誰か(または何か他のもの)場合、これは、バージョン1.2の前史郎に発生しますが(Subject.logout前にセッションを無効)(例えばhttpSession.invalidate(呼び出される)とsubject.logout(:このような何か))。

これはSHIRO-298のバグとして提起されており、すでに1.2.0-SNAPSHOTビルドで解決されています。現在のスナップショットビルドの1つを使用するか、Shiro 1.2.0をリリース時に使用します。

HTH!

乾杯、

+0

こんにちは、私はまだ同じ問題 'のgetAttributeを取得し、史郎バージョン' 1.2.4'を使用しています:セッションはすでにログアウトして再ログイン後invalidated'。どんな助け? – Newbie

1

ため

おかげで、あなたのUIフレームワークは、ログアウト後にセッションを再生成されていないように見えます。 ログイン呼び出しの直前にsubject.getSession()を呼び出すセッションを強制的に新しいセッションに強制しようとすることができます。その後、

private void tryLogin(UsernamePasswordToken token) { 
     Subject subject = SecurityUtils.getSubject(); 
     Session session = subject.getSession(); 
     try { 
       subject.login(token); 
関連する問題