2014-01-29 148 views
0

我已經花了一天的時間,但不明白爲什麼remember_me在SPring安全不起作用。我只使用XML作爲沒有Java代碼配置:春季安全記得我不工作

<http use-expressions="false" auto-config="true"> 
     <intercept-url pattern="/css/**" filters="none" /> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
     <form-login login-page="/BL/index.html" default-target-url="/BL/main.html" 
      authentication-failure-url="/BL/index.html?autherror=true" 
      always-use-default-target='true' /> 
     <logout logout-url="/logout" logout-success-url="/BL/index.html" 
      invalidate-session="true" /> 
     <remember-me data-source-ref="dataSource" 
      user-service-ref="jdbcUserService" key="99999989" 
      token-validity-seconds="86400" /> 
     <access-denied-handler error-page="/BL/index.html?autherror=true" /> 
    </http> 

總之index.html是我的登錄頁面。當我登錄時,我看到名爲SPRING_SECURITY_REMEMBER_ME_COOKIE的值創建的cookie的值爲V2FrblE1Vlk3cFd6ZDIvZnRjdnlIZz09OndOb2h2NmUvdFlZRHJvRFRPV3lheHc9PQ

但是,如果我現在回到index.html頁面,它會要求我再次登錄。我仍然看到相同的cookie值。上述xml配置中的錯誤是什麼?我希望它不應該要求我再次登錄,但應該重定向到我的主頁,因爲我已經登錄。

我看到下面的日誌服務器上。看起來像一個請求被與用戶作爲空字符串發送:

14:16:34031 DEBUG JdbcUserDetailsManager:155 - 查詢返回任何 結果爲用戶 '' 14:16:34031 DEBUG DaoAuthenticationProvider還可以爲:131 - 用戶'' 未找到14:16:34031 DEBUG UsernamePasswordAuthenticationFilter:318 - 身份驗證請求 失敗: org.springframework.security.authentication.BadCredentialsException: 認證錯誤14:16:34032 DEBUG UsernamePasswordAuthenticationFilter:319 - 更新 SecurityContextHolder中包含null身份驗證14:16:34,032 DE BUG UsernamePasswordAuthenticationFilter:320 - 委派到 認證失敗 handlerorg.springframework.se[email protected]6011c7cf 14:16:34032 DEBUG對PersistentTokenBasedRememberMeServices:214 - 交互式登錄嘗試是不成功的。 14:16:34032 DEBUG 對PersistentTokenBasedRememberMeServices:300 - 取消餅乾 14:16:34032 DEBUG SimpleUrlAuthenticationFailureHandler:67 - 重定向到/BL/index.html?autherror=true

+0

你使用哪種版本的spring security?當用戶使用該用戶名和密碼登錄時, – Ralph

+0

是存儲在數據庫中的令牌嗎? – Ralph

+0

@Ralph Spring-Security 3.0.4 – Jatin

回答

6

春天並不妨礙在登錄用戶訪問登錄頁面。

測試了rememberMe提供至少需要兩頁(使用不同的登錄)

  • 登錄頁面
  • 如果用戶登錄,只能訪問一個正常的頁面。

用戶擁有此cookie後,您可以關閉瀏覽器,再次打開瀏覽器,然後直接訪問受保護的頁面(用戶不應該被重定向或轉到登錄頁面)

但是,您的日誌記錄顯示,您嘗試通過登錄頁面登錄用戶,另一方面,您告訴您要使用記住我的記號。 - 對於使用Remember Me Cookie,您不能請求登錄頁面,而是請求正常頁面。

的RememberMeAuthenticationFilter會(當它嘗試登錄)調試級別這個消息打印:

  • 「SecurityContextHolder的填充記得,我的令牌:...」(成功)
  • 「 SecurityContextHolder沒有填充記憶-Me標記,因爲AuthenticationManager被拒絕認證由RememberMeServices返回......「(失敗)
+0

這是我想寫的確切答案。做得好! – OhadR

+0

@Ralph謝謝。我誤解了功能。現在它解釋了一切。 – Jatin