您现在的位置是:热点 >>正文

shiro网页无法访问

热点81人已围观

简介打开浏览器,输入地址,回车。页面没动静。刷新,还是白屏,或者干脆甩出一个502。要是你正在用Shiro做权限管理的系统,这种“网页无法访问”十有八九不是网络问题,而是Shiro的过滤器链把你拦在了门外 ...

打开浏览器,网问输入地址,页无回车。法访页面没动静。网问刷新,页无还是法访白屏,或者干脆甩出一个502。网问要是页无你正在用Shiro做权限管理的系统,这种“网页无法访问”十有八九不是法访网络问题,而是网问Shiro的过滤器链把你拦在了门外,而且拦得悄无声息。页无

我上周就踩了这个坑。法访一个后台管理系统,网问登录页面能打开,页无输入账号密码后跳转,法访直接白屏。F12看Network,请求返回302,重定向到/login,但/login本身又返回200,页面却啥也没有。查了半天,最后发现是Shiro的authc过滤器在作怪——它把静态资源也拦截了,CSS和JS加载失败,页面自然渲染不出来。

Shiro的过滤器链是个“隐形门卫”

Shiro的核心是FilterChainResolver。你配了/login = anon,/** = authc,以为万事大吉。但实际运行时,过滤器链的匹配顺序是从上到下,一旦匹配到就停止。问题在于,很多人把/** = authc写在最前面,或者用了/** = user却没放行登录接口。结果就是:浏览器请求/css/main.css,Shiro一看,未登录,重定向到登录页。浏览器拿到的是登录页的HTML,却当成CSS解析,样式全乱,页面看起来就像“无法访问”。

更隐蔽的是Ajax请求。前端发fetch('/api/user'),Shiro返回302到登录页。fetch默认跟随重定向,拿到登录页的HTML,JSON解析失败,控制台报错,但页面不跳转。用户看到的就是“点击没反应”或者“数据加载失败”。

三个常见死法,你中过哪个

第一种:静态资源被拦截。 典型的配置长这样:

filterChainDefinitionMap.put("/**", "authc");

没给/static/**、/css/**、/js/**加anon。浏览器请求这些资源时被重定向,页面骨架在,但样式和交互全丢。你以为是网页无法访问,其实是访问了但被换了内容。

第二种:登录接口本身被拦截。 有人把/login配成authc,或者忘了配anon。用户提交登录表单,Shiro要求先登录才能访问登录接口——死循环。浏览器不断重定向,最后报ERR_TOO_MANY_REDIRECTS。

第三种:Session或Cookie问题。 前后端分离时,Shiro默认用JSESSIONID。如果前端跨域没带withCredentials,或者后端没配CORS允许凭证,每次请求都是新Session。登录成功了,下一个请求Shiro又不认识你,继续拦。用户感觉就是“登录了但网页无法访问”。

怎么快速定位

别急着改代码。打开浏览器开发者工具,切到Network面板,勾选“Preserve log”。刷新页面,看第一个失败请求的Status Code。如果是302,看Location指向哪里。如果是401或403,看Response Headers里有没有WWW-Authenticate。然后去Shiro配置里找对应的过滤器链。

我习惯在ShiroFilterFactoryBean里加一行日志,打印实际生效的过滤器链。Spring Boot项目里可以这样:

@Bean public ShiroFilterFactoryBean shiroFilter() {  ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); // ... 其他配置 Map<String, Filter> filters = bean.getFilters(); filters.put("anon", new AnonymousFilter()); // 打印链 bean.getFilterChainDefinitionMap().forEach((k, v) -> System.out.println("Chain: " + k + " -> " + v)); return bean; }

启动时看控制台,匹配顺序一目了然。如果/**排在/login前面,那就是配置顺序错了。Shiro用的是LinkedHashMap,顺序即优先级。

一个容易忽略的细节

Spring Boot整合Shiro时,如果用了@Bean方式配置ShiroFilterFactoryBean,注意filterChainDefinitionMap的注入顺序。有人用@Autowired注入一个Map,结果Spring的Map是无序的,Shiro拿到的顺序随机。今天能访问,明天重启就502。解决办法是手动用LinkedHashMap按顺序put,别依赖自动注入。

另外,Shiro的authc过滤器默认重定向到/login.jsp。如果你没这个页面,或者路径不对,浏览器就会显示404或白屏。检查loginUrl配置,改成你实际的登录页地址。

网页无法访问不一定是Shiro的锅,但用Shiro的项目里,十次有八次是过滤器链在捣鬼。别光看日志,去Network面板里翻请求,比什么都快。

Tags:

相关文章

  • 网络安全top10漏洞

    热点

    OWASP Top 10开放Web应用程序安全项目十大风险)是网络安全领域最具影响力的漏洞清单,每三年更新一次。2021年版直接反映了攻击者最常利用的弱点——其中“访问控制失效”跃居首位,超过了以往常 ...

    【热点】

    阅读更多
  • 域名有了怎么建网站

    热点

    域名注册完,你盯着控制台里那串字母,突然意识到一个尴尬的事实:这玩意儿跟网站之间,隔着一整个宇宙。 别慌。域名只是门牌号,网站才是房子本身。你现在的任务,是搞明白怎么把门牌号挂到一栋能住的房子上。 最 ...

    【热点】

    阅读更多
  • 在线解盘

    热点

    老周盯着屏幕上的分时图,手指在键盘上悬了足足十秒,最后还是没点下去。他转头问我:“你说这波反弹,到底该不该追?”我没直接回答,而是把K线图切到周线级别,把鼠标指针停在去年那个跳空缺口的位置。缺口下方, ...

    【热点】

    阅读更多


友情链接