0
我在Spring MVC應用程序中使用Spring Security進行用戶身份驗證。我發現了一個非常奇怪的行爲,這可能是由於我對Spring Security的錯誤配置或錯誤造成的。我需要幫助找出它是哪一個。另一個Spring安全問題
一個重要的注意事項,在任何人將此問題標記爲某個「Spring Security註銷返回按鈕」的副本之前 - 就像問題:此問題與註銷後的行爲無關。這裏的一切都發生在一次用戶會話中
所以,我有一些頁面對任何用戶都是可見的,有些頁面只對管理員可見。 home.jsp
對任何用戶都是可見的,在我的spring-security.xml
中是default-target-url
。 users.jsp
頁面(所有用戶的列表)但是假設僅對管理員可見。
現在一個簡單的場景:
- 啓動應用
- 身份登錄用戶和重定向到
home.jsp
頁面任何用戶都可以看到 - 導航頁面
users.jsp
只有管理員可以看到並獲得訪問被拒絕(沒事) - 導航到任何其他頁面
- 點擊後退按鈕和
users.jsp
頁面出現,我甚至可以看到管理員已登錄,但我從未以管理員身份登錄,因爲它已啓動該應用程序! (我可以看到誰在使用<sec:authentication property="principal.username" />
記錄在每一個JSP頁面上)
這是我spring-security.xml
:
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/essays/auth/login" access="permitAll"/>
<intercept-url pattern="/essays/auth/logout" access="permitAll"/>
<intercept-url pattern="/essays/auth/denied" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/essays/main/user/home" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/essays/main/user/list" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/essays/main/user/add" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/essays/main/user/{userId}/edit" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/essays/main/user/delete" access="hasRole('ROLE_ADMIN')"/>
<form-login login-page="/essays/auth/login"
authentication-failure-url="/essays/auth/login?error=true"
default-target-url="/essays/main/user/home"
always-use-default-target="true"/>
<access-denied-handler error-page="/essays/auth/denied"/>
<logout invalidate-session="true"
logout-success-url="/essays/auth/login"
logout-url="/essays/auth/logout"/>
</http>
<authentication-manager>
<authentication-provider user-service-ref="customUserDetailsService">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
任何想法?這是一個錯誤還是我正在做一些可怕的錯誤?
請通過清除緩存開始。然後再試一次。如果問題仍然存在,請附上您指定的整個流程的Spring Security日誌。 –
清除緩存解決了問題。現在我只是覺得愚蠢。非常感謝。 –
@RobWinch請讓它成爲答案,我可以接受它。也許它會幫助別人努力學習編程:) –