クラス TokenBasedRememberMeServices

  • 実装されたすべてのインターフェース:
    org.springframework.beans.factory.Awareorg.springframework.beans.factory.InitializingBeanorg.springframework.context.MessageSourceAwareLogoutHandlerRememberMeServices

    public class TokenBasedRememberMeServices
    extends AbstractRememberMeServices
    以前に記憶したユーザーを Base-64 エンコード Cookie で識別します。

    この実装は外部データベースに依存しないため、単純なアプリケーションにとって魅力的です。Cookie は、最後の AbstractRememberMeServices.loginSuccess(HttpServletRequest, HttpServletResponse, Authentication) の日付から特定の期間有効です。インターフェース規約に従って、このメソッドは、プリンシパルが対話型認証に成功した場合にのみ呼び出されます。そのため、この期間は、資格情報を提供した最後の認証試行から始まります。remember-me を介して最後にログインした期間ではありません。実装は、AbstractRememberMeServices.setParameter(String) によって定義されたパラメーターが存在する場合にのみ、remember-me トークンを送信します。

    この実装には UserDetailsService が必要です。これにより、返される UserDetails から有効な Authentication を構築できます。これは、ユーザーのパスワードが使用可能であり、エンコードされた Cookie の一部として確認できるようにするためにも必要です。

    この実装によってエンコードされた Cookie は、次の形式を採用しています。

     username + ":" + expiryTime + ":"
                    + Md5Hex(username + ":" + expiryTime + ":" + password + ":" + key)
     

    そのため、ユーザーがパスワードを変更すると、remember-me トークンは無効になります。同様に、システム管理者は、キーを変更することにより、課題となっているすべての remember-me トークンを無効にすることができます。これは、パブリックマシン(キオスクシステム、インターネットカフェなど)に残された記憶ミートークンから回復するためのいくつかの合理的なアプローチを提供します。最も重要なことは、ユーザーのパスワードがユーザーエージェントに送信されることは決してなく、重要なセキュリティ保護を提供することです。残念ながら、この実装ではユーザー名が必要です(remember-me サービスをデータベースに依存したくないため)。高度なセキュリティアプリケーションは、有効なユーザー名のこの時々の望ましくない開示に注意する必要があります。

    これは、多くのアプリケーションに適した基本的な remember-me 実装です。ただし、より安全な記憶方式のアプローチが必要な場合は、データベースベースの実装をお勧めします(PersistentTokenBasedRememberMeServices を参照)。

    デフォルトでは、トークンは最後に成功した認証試行から 14 日間有効です。これは AbstractRememberMeServices.setTokenValiditySeconds(int) を使用して変更できます。この値が 0 未満の場合、expiryTime は 14 日間のままですが、Cookie の maxAge プロパティには負の値が使用され、ブラウザーが閉じられると保存されなくなります。

    • コンストラクターの詳細

      • TokenBasedRememberMeServices

        public TokenBasedRememberMeServices​(java.lang.String key,
                                            UserDetailsService userDetailsService)
    • メソッドの詳細

      • processAutoLoginCookie

        protected UserDetails processAutoLoginCookie​(java.lang.String[] cookieTokens,
                                                     javax.servlet.http.HttpServletRequest request,
                                                     javax.servlet.http.HttpServletResponse response)
        クラスからコピーされた説明: AbstractRememberMeServices
        送信された永続的なログインクッキーを処理するために autoLogin から呼び出されます。サブクラスはクッキーを検証し、必要な追加の管理を実行する必要があります。
        次で指定:
        クラス AbstractRememberMeServicesprocessAutoLoginCookie 
        パラメーター:
        cookieTokens - デコードおよびトークン化された Cookie 値
        request - リクエスト
        response - 必要に応じて Cookie を変更できるようにするレスポンス。
        戻り値:
        Cookie が正常に検証された場合、対応するユーザーアカウントの UserDetails。
      • makeTokenSignature

        protected java.lang.String makeTokenSignature​(long tokenExpiryTime,
                                                      java.lang.String username,
                                                      java.lang.String password)
        Cookie に入れるデジタル署名を計算します。デフォルト値は MD5 です。(「ユーザー名: tokenExpiryTime: パスワード: キー」)
      • isTokenExpired

        protected boolean isTokenExpired​(long tokenExpiryTime)
      • onLoginSuccess

        public void onLoginSuccess​(javax.servlet.http.HttpServletRequest request,
                                   javax.servlet.http.HttpServletResponse response,
                                   Authentication successfulAuthentication)
        クラスからコピーされた説明: AbstractRememberMeServices
        Remember-Me ログインがリクエストされたときに loginSuccess から呼び出されます。通常、サブクラスによって実装され、Remember-Me Cookie を設定し、実装で必要な場合はその記録を保存します。
        次で指定:
        クラス AbstractRememberMeServicesonLoginSuccess 
      • calculateLoginLifetime

        protected int calculateLoginLifetime​(javax.servlet.http.HttpServletRequest request,
                                             Authentication authentication)
        新しく生成された Remember-Me ログインの有効期間を秒単位で計算します。この期間 (現在の時刻から) が経過すると、Remember-Me ログインは期限切れとみなされます。このメソッドでは、ログインで提供されるリクエストパラメーターまたは Authentication オブジェクト内の情報に基づいてカスタマイズできます。デフォルト値は、トークンの有効期間プロパティ tokenValiditySeconds のみです。

        返された値はトークンの有効期限を計算するために使用され、Cookie の maxAge プロパティを設定するためにも使用されます。SEC-485 を参照してください。

        パラメーター:
        request - リクエストは onLoginSuccess に渡されました
        authentication - 成功した認証オブジェクト。
        戻り値:
        秒単位の寿命。
      • retrieveUserName

        protected java.lang.String retrieveUserName​(Authentication authentication)
      • retrievePassword

        protected java.lang.String retrievePassword​(Authentication authentication)