shiro +springmvc無許可權跳轉到指定錯誤頁面
阿新 • • 發佈:2019-01-24
最近在shiro+springMvc來控制權限的時候出現沒有許可權的時候不會跳到指定的固定頁面,而是顯示錯誤程式碼在頁面,這其實不是我想要的效果。首先我們要知道為什麼會這樣,然後再去找解決的方法。
原因:
由於我們架構是用springmvc框架來搭建的所以專案的路徑跳轉是由springmvc 來控制的,也就是說我們在shiro裡面的配置沒有用,如下:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/"/> //沒有用,達不到預期效果
<property name="successUrl" value="/jsp/main"/> //沒有用,達不到預期效果
<property name="unauthorizedUrl" value="/rest/page/401"/> //沒有用,達不到預期效果
<property name="filterChainDefinitions">
<value>
<!-- 靜態資源允許訪問 -->
/rs/** = anon
/login = anon
/common/** = anon
<!-- 登入頁允許訪問 -->
/rest/user/login = anon
/=anon
/login.do=anon
<!-- 其他資源需要認證 -->
/** = authc
</value>
</property>
</bean>
那麼我們該怎麼解決呢?既然shiro的配置沒有用了,那麼就要來找找springmvc中能不能解決這個問題了,springmvc中有一個org.springframework.web.servlet.handler.SimpleMappingExceptionResolver類就可以解決這個問題,我們在spring-mvc.xml配置檔案中配置一個bean,如下:
<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.apache.shiro.authz.UnauthorizedException">
//表示捕獲的異常
/unauthorized //捕獲該異常時跳轉的路徑
</prop>
<prop key="org.apache.shiro.authz.UnauthenticatedException"> //表示捕獲的異常
/unauthenticated //捕獲該異常時跳轉的路徑
</prop>
</props>
</property>
</bean>