1. 程式人生 > >web專案整合shiro後加入tomcat啟動超時,tomcat無法正常啟動

web專案整合shiro後加入tomcat啟動超時,tomcat無法正常啟動

1:問題出現緣由

web專案許可權框架使用shiro,在和單點登入整合後,登入login添加了一些判斷,如下:

Object authUser=UserUtils.getShiroSession().getAttribute("self_login_check");

if(null==authUser&&StringUtils.isBlank((String)UserUtils.getShiroSession().getAttribute("UserLoginInfo"))){
return "redirect:/";
}else{
if(SecurityUtils.getSubject().isAuthenticated()){
SecurityUtils.getSubject().logout();
}
}
return "system/user/login";

因為authUser在獲取self_login_check的時候一直為 null 所以程式一直走  return “redirect:/" 這步

這步驟因為是tomcat在啟動還有沒有shiro主體,所以就直接跳轉到login,這個時候就形成了一個  login 跳轉到 /  而  / 跳轉到login的死迴圈,所以tomcat就啟動超時了,雖然tomcat的啟動一直到最後給你的感覺都是正常啟動了,但是就是超時,無法啟動訪問,就是死迴圈導致的。

這個死迴圈出現的前提是你在配置shiro的時候filterChainDefinitions  必須有 /**=authc 這個內容,不然死迴圈也不會出現。

2:修改出現的問題

直接更改判斷變數 authUser的值即可,比如更改為:

if(null!=authUser&&StringUtils.isNotBlank((String)UserUtils.getShiroSession().getAttribute("UserLoginInfo"))){

即可解決問題。 這個解決問題的核心還是解決 死迴圈,死迴圈也是有整合shiro啟動的時候走一系列過濾器造成的。