我想改變記住我的請求參數來覆蓋默認參數'_spring_security_remember_me' 和自定義我記得我的服務來替換<remember-me />
命名空間配置。Spring Security 3自定義記得我
,所以我配置我記得我的服務:
<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>
命名空間配置:
<intercept-url pattern="/secure/index" access="ROLE_ADMIN" />
<remember-me services-ref="rememberMeServices"/>
當我運行應用程序和登錄。我發現cookie被創建,然後我關閉我的ie並重新打開。 輸入路徑'/ secure/index',tomcat show me access is denied。 但我恢復到Spring Security的默認配置,一切正常。
我調試代碼中找到
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;
}
的方法extractRememberMeCookie(request)
,當我使用我的自定義還記得我的服務代碼request.getCookies()
總是返回null,但我恢復的Spring Security默認命名空間<remember-me/>
,做同樣的(乾淨的餅乾 - 登錄 - 關閉ie - 重新打開 - 入口路徑'/安全/索引'),我也發現cookie是創建。 和我調試代碼我發現request.getCookies()
返回cookie名稱'SPRING_SECURITY_REMEMBER_ME_COOKIE'和認證成功。
需要其他配置才能記住我的身份驗證? 但我不知道,有人會幫助我。
謝謝Raghuram。但我不知道爲什麼request.getCookies()總是返回null。如果爲空無法驗證。 – Yang