為了保證操作統一性,當用戶沒有登陸時,默認為用戶分配匿名用戶的權限。
在配置文件中使用auto-config="true"就會啟用匿名登錄功能。在啟用匿名登錄之后,如果我們希望允許未登錄就可以訪問一些資源,可以在進行如下配置。
<http auto-config='true'>
<intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
設置成 ROLE_ANONYMOUS 也可以。
<http auto-config='true'>
<intercept-url pattern="/" filters="none" />
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
filters="none"表示當我們訪問“/”時,是不會使用任何一個過濾器去處理這個請求的,它可以實現無需登錄即可訪問資源的效果,但是因為沒有使用過濾器對請求進行處理,所以也無法利用安全過濾器為我們帶來的好處,最簡單的,這時SecurityContext內再沒有保存任何一個權限主體了,我們也無法從中取得主體名稱以及對應的權限信息。
---------------------------------------------------------------------------------------------
9.ExceptionTranslationFilter
此過濾器的作用是處理中FilterSecurityInterceptor拋出的異常,然后將請求重定向到對應頁面,或返回對應的響應錯誤代碼。
---------------------------------------------------------------------------------------------
10.SessionFixationProtectionFilter
防御會話偽造攻擊。
解決session fix的問題其實很簡單,只要在用戶登錄成功之后,銷毀用戶的當前session,并重新生成一個session就可以了。
<http auto-config='true' session-fixation-protection="none">
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
session-fixation-protection的值共有三個可供選擇,none,migrateSession和newSession。默認使用的是migrationSession
---------------------------------------------------------------------------------------------
11.FilterSecurityInterceptor
用戶的權限控制都包含在這個過濾器中。
功能一:如果用戶尚未登陸,則拋出AuthenticationCredentialsNotFoundException“尚未認證異常”。
功能二:如果用戶已登錄,但是沒有訪問當前資源的權限,則拋出AccessDeniedException“拒絕訪問異常”。
功能三:如果用戶已登錄,也具有訪問當前資源的權限,則放行。