2011-12-07 12 views
0

私はデフォルトのパラメータ '_spring_security_remember_me' をオーバーライドする私の要求パラメータを覚えておきたいのですが、私は<remember-me />の名前空間の設定を置き換える私のサービスを覚えています。春のセキュリティ3カスタム私を覚えて

ので、私は私が私のサービスを覚えて:configと私は、アプリケーションとログインを実行したときに

<intercept-url pattern="/secure/index" access="ROLE_ADMIN" /> 
<remember-me services-ref="rememberMeServices"/> 

<bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices"> 
    <property name="key" value="MY_REMEMBER_ME_KEY" /> 
    <property name="cookieName" value="MY_REMEMBER_ME_COOKIE" /> 
    <property name="parameter" value="remember" /> 
    <property name="tokenValiditySeconds" value="1209600" /> 
    <property name="useSecureCookie" value="true" /> 
    <property name="userDetailsService" ref="userDetailsService" /> 
    <property name="alwaysRemember" value="false" /> 
</bean> 

名前空間の設定。私はクッキーが作成され、次に私は私のクローズを発見し、再び開く。 エントリーのパス '/ secure/index'、tomcat show meアクセスが拒否されました。 しかし、私はSpring Securityのデフォルト設定に戻りますが、すべて正常です。私は私のカスタムを使用するときに常にnullを返しコードrequest.getCookies()、コードがメソッドextractRememberMeCookie(request)

RememberMeAuthenticationFilter#doFilter 
... 
Authentication rememberMeAuth = rememberMeServices.autoLogin(request, response); 
... 
//autoLogin(request, response) method code. 
String rememberMeCookie = extractRememberMeCookie(request); 
... 
protected String extractRememberMeCookie(HttpServletRequest request) { 
    Cookie[] cookies = request.getCookies(); 

    if ((cookies == null) || (cookies.length == 0)) { 
     return null; 
    } 

    for (int i = 0; i < cookies.length; i++) { 
     if (cookieName.equals(cookies[i].getName())) { 
      return cookies[i].getValue(); 
     } 
    } 

    return null; 
} 

を見つけるデバッグ

は私のサービスを覚えて、しかし、私は春のセキュリティデフォルトの名前空間<remember-me/>を元に戻すと同じ(クリーンクッキー行う - ログイン - 閉じる - つまり - reopen - エントリパス '/ secure/index')、私はまた、クッキーが作成されていることを見つける。 と私はコードをデバッグrequest.getCookies()クッキー名 'SPRING_SECURITY_REMEMBER_ME_COOKIE'と認証を正常に返します。

私の認証を覚えておくためには他の設定が必要ですか? しかし、私は知らない、誰かが私を助けるだろう。

答えて

0

それが返さ org.springframework.security.core.userdetails.UserDetailsから有効な 認証を構築することができるように、この実装で必要とされる あるorg.springframework.security.core.userdetails.UserDetailsService

TokenBasedRememberMeServicesの文書を1として。ユーザーのパスワードが利用できるように、これはまた であり、符号化されたクッキーの一部として をチェックすることができます。

設定が間違っているか不完全である可能性があります。

+0

Raghuramに感謝します。私はなぜrequest.getCookies()は常にnullを返すのか分からない。 nullの場合はAuthenticaできませんでした。 – Yang

2

あなた<remember-me />はまだこれが

<remember-me key="MY_REMEMBER_ME_KEY" services-ref="rememberMeServices"/> 
0

これは、実際に古いポストであるべきであるキー

を必要としています。しかし、私はちょうど問題があったrequest.getCookies() null /春4。

私はそれを修正するためにuseSecureCookie = trueを削除しました。

関連する問題