私はデフォルトのパラメータ '_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'と認証を正常に返します。
私の認証を覚えておくためには他の設定が必要ですか? しかし、私は知らない、誰かが私を助けるだろう。
Raghuramに感謝します。私はなぜrequest.getCookies()は常にnullを返すのか分からない。 nullの場合はAuthenticaできませんでした。 – Yang