Shiro 通過註解方式判斷當前用戶沒有權限時,跳轉不到指定的錯誤頁面,就是因爲 unauthorizedUrl 不起作用,解決方法就是在 shiro 配置中加上下面這一段配置(異常全路徑做key,錯誤頁面做value)
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.apache.shiro.authz.UnauthorizedException">403</prop>
</props>
</property>
</bean>
原因:因爲 shiro 源代碼中判斷了 filter 是否爲 AuthorizationFilter, 只有 perms,roles,ssl,rest,port 纔是屬於AuthorizationFilter,而anon,authcBasic,auchc,user 是 AuthenticationFilter,所以 unauthorizedUrl 設置不起作用。
注意!!!
使用這個配置有一個很坑的地方。就是設置頁面跳轉路徑的時候,不能隨便設置。
比如我上邊代碼的頁面路徑寫的是 403 ,但實際返回的路徑是 /WEB-INF/html/403.html 。
我也不知道爲什麼,但是我們只要在開發過程中,把相應的錯誤文件建立在它返回的路徑中提示的文件夾裏面就好了。