在看shiro的時候遇到一個問題,shiro配的successUrl不生效的問題
<!-- web.xml中shiro的filter對應的bean --> <!-- Shiro 的Web過濾器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <!-- loginUrl認證提交地址,如果沒有認證將會請求此地址進行認證,請求此地址將由formAuthenticationFilter進行表單認證 --> <property name="loginUrl" value="/login2.action" /> <!-- 認證成功統一跳轉到first.action,建議不配置,shiro認證成功自動到上一個請求路徑--> <property name="successUrl" value="/first.action"/> <!-- 通過unauthorizedUrl指定沒有權限操作時跳轉頁面--> <!-- <property name="unauthorizedUrl" value="/test.jsp" /> --> <!-- 過慮器鏈定義,從上向下順序執行,一般將/**放在最下邊 --> <property name="filterChainDefinitions"> <value> <!-- 對靜態資源設置匿名訪問 --> <!-- 請求 logout.action地址,shiro去清除session --> /logout.action = logout /** = authc </value> </property> </bean>
用上面的配置會有這樣的情況:
1.如果是訪問其他已存在的頁面被攔截到登錄頁面,登錄后就會跳轉到之前的頁面。
2.如果是直接訪問登錄頁面或者是通過退出登錄到登錄頁面,再次登錄就會跳轉到“/”。
3.不管怎么樣,都沒有跳轉到successUrl指定的url。
原因是這樣的:
successUrl配置只是做為一種附加配置,只有session中沒有用戶請求地址時才會使用successUrl。系統默認的是認證成功后跳轉到上一次請求的路徑,如果是首次請求,那shiro就會跳轉到默認虛擬路徑“/”,也就是跳轉到index.jsp。
解決方法:
簡單一點的話就可以直接在index.jsp里面把請求重定向到你指定的頁面
