3

私はshiroにかなり慣れていないので、ここに私の質問があります:

Tomcat 8 コンテナーで Spring WebMVC / Spring Framework (4.x) を使用して、Shiro をアプリケーションに実装しました。これまでのところ、ロールとアクセス許可は正常に機能しており、ログインも問題ありませんが、問題は、war ファイルを再デプロイしたり、サーバーを停止/再起動したりしても、セッションがまだ機能していることです。これは、ここでは意図していません。

サーバーの再デプロイ/再起動後にログインしているすべてのユーザーの「自動ログアウト」のようなものを実装するために私がしなければならないことのヒントを得ることができれば素晴らしいでしょう。「[理由]によりログアウトされました」と言っています。

よろしく、 ドミニク

4

1 に答える 1

2

SessionDAO インターフェースを使用できますが、shiro に SessionDAO を使用させるには、次のように追加の構成を行う必要があります。

http://shiro.apache.org/session-management.html#SessionManagement-SessionStorage

正しく構成したら、次のようなことができます。

    DefaultSecurityManager securityManager = (DefaultSecurityManager) SecurityUtils.getSecurityManager();
    DefaultSessionManager sessionManager = (DefaultSessionManager) securityManager.getSessionManager();
    Collection<Session> activeSessions = sessionManager.getSessionDAO().getActiveSessions();
    for (Session session: activeSessions){
         session.stop();
    }

提案したようなメッセージが必要な場合にのみ、ブラウザのセッションがログアウトされた場合、サーバーには手がかりがないため、セッションを削除した後にこれを行うことはできません。

代わりに、session.stop() の上のデータベースに何かを書き込むことができます。つまり、次のリクエストが自動ログアウト アクションになるようにフラグを設定します。おそらく、フィルターを使用して自動ログアウト ロジックを実装できます。

于 2014-05-21T13:03:56.450 に答える