2013-10-22 31 views
1

我正在使用spring security來實現我的應用程序的登錄功能。大部分時間春季安全工作正常,如預期。但偶爾它會發瘋。那時候沒有任何設計的登錄頁面會打開一個用戶名和密碼文本框。當我從未完全形成的登錄頁面登錄時,我的主頁中的一些隨機png或js文件正在打開。然後我將從我的網址中刪除相應的js或png部分,然後按回車。那時我完全成型的登錄頁面被打開,應用程序將按預期順利運行。我不知道我的彈簧安全部件發生了什麼。有人請幫忙。以下是我的彈簧安全配置。Spring Security有時會表現怪異

<http auto-config="true" use-expressions="true"> 
    <!-- <intercept-url pattern="/loadISearch" access="ROLE_ADMIN" /> --> 

    <intercept-url pattern="/" access="permitAll" /> 
    <intercept-url pattern="/accessdenied**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 

     <form-login login-page="/" default-target-url="/dashboard1" authentication-failure-url="/accessdenied" /> 
     <logout invalidate-session="true" logout-success-url="/" /> 

    </http> 

回答

1

我的猜測是,以下是正在發生的事情:

  • 你的登錄頁面使用CSS和圖像造型
  • 春季安全被拒絕訪問你的CSS /圖像文件,因爲你沒有授予他們訪問權限。因爲這個原因,登錄頁面看起來與你期望的不同並且不可識別
  • 有時,由於CSS /圖像被瀏覽器緩存,頁面中的登錄看起來很正常。由於瀏覽器緩存了CSS /圖像,因此它不會向容器請求資源,Spring Security無法保護它,因此登錄頁面會按照您的預期呈現。
  • Spring Security的默認策略是保存您在驗證之前所做的最後一個請求,並將用戶發送到那裏。由於您的登錄頁面正在向受保護的資源(即CSS,圖像等)發出額外請求,因此在進行身份驗證之後,您將被髮送到這些頁面。由於請求是異步的,因此結果可能不確定。

要解決該問題,請確保您授予訪問您登錄頁面使用的所有資源的權限。例如,如果你把所有的CSS,JS和圖片名爲/資源文件夾中的/你可以修改配置如下:

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/resources/**" access="permitAll" /> 

    <intercept-url pattern="/" access="permitAll" /> 
    <intercept-url pattern="/accessdenied**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 

    <form-login login-page="/" 
       default-target-url="/dashboard1" 
       authentication-failure-url="/accessdenied" /> 
    <logout invalidate-session="true" logout-success-url="/" /> 

</http> 
+0

非常感謝您羅布給了我一個很好的洞察力。 –