1. 程式人生 > >shiro +springmvc無許可權跳轉到指定錯誤頁面

shiro +springmvc無許可權跳轉到指定錯誤頁面

    最近在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>