2013-03-23 108 views
0

我使用Spring Security的3.1.X和努力實現以下情形:重定向到登錄的isFullyAuthenticated()的URL,然後,再次

  • 一頁固定與isFullyAuthenticated()
  • 的當前用戶只與認證記住,所以沒有充分驗證的
  • 用戶導航到這充分驗證的頁面 - 這應該不允許(這不是)
  • 然而,用戶不應該得到403頁 - 相反,應提示用戶通過登錄窗體
  • 登錄後登錄,用戶應該被允許繼續他先前請求的頁面,因爲現在他的完全驗證的用戶

我的春季安全配置是:

<http use-expressions="true"> 
    <intercept-url pattern="/admin/full_auth_only.html" access="isFullyAuthenticated()" /> 

    <form-login login-page="/login.html" default-target-url="/authenticated.html" /> 
    <logout /> 
    <remember-me key="someAppKey" /> 

</http> 

我嘗試添加:

 <access-denied-handler error-page="/login.html" /> 

然而,現在的問題是,訪問該頁面的時候,我確實是由登錄表單的提示,只有網址不符合登錄;相反,它是完全認證頁面的URL:

http://localhost:8080/spring-security/admin/full_auth_only.html

然後打破了身份驗證過程,試圖訪問(無效)URL時失敗: http://localhost:8080/spring-security/admin/j_spring_security_check
這應該是:
http://localhost:8080/spring-security/j_spring_security_check

對此的任何幫助表示讚賞 - 我認爲這個用例非常常見,所以我寧願使用名稱空間支持而不是自定義方向。

謝謝。
Eugen。

回答

0

我無法使用Spring Security的3.1.3.RELEASE版本重現您的問題。你使用哪個版本?

認證請求由它檢查該請求是否的URL與結束的預先配置的值的AbstractAuthenticationProcessingFilter截獲(默認爲/j_spring_security_check)。任何帶有該結尾的URL都會觸發認證嘗試。你可以看到相關的代碼here

這意味着,你說的網址是無效的其實應該沒有問題來處理。

以上鍊接的代碼還沒有被非常早期的版本(2.x)發生變化,所以應該在你的情況下,一些其他問題。

如果你可以分享您的配置和一些調試級別的日誌,這將有助於揭示了什麼是真正的問題。

0

1.如果您有web.xml,請刪除任何welcome-file-list

2.確保always-use-default-target未設置爲falseform-login標籤或刪除它一起。

3.確保您已允許每個人訪問您的登錄頁面。像這樣<intercept-url pattern="/login.htm" access="permitAll()"/>

這應該工作。