web项目集成shiro后加入tomcat启动超时,tomcat无法正常启动

来源:互联网 发布:软件不兼容高分辨率 编辑:程序博客网 时间:2024/05/21 21:46

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启动的时候走一系列过滤器造成的。

0 0
原创粉丝点击