Shiro 自定义filter匹配异常

最近忙着研究在 Springboot 上使用 Shiro 的问题。刚好就遇到个诡异事,百度 Google 也没找到啥有价值的信息,几番周折自己解决了,这里稍微记录下。

自定义 Filter

Shiro 支持自定义 Filter 大家都知道,也经常用,这里我也用到了一个自定义 Filter,主要用于验证接口调用的 AccessToken 是否有效。

Shiro 自定义filter匹配异常_第1张图片
Shiro 自定义filter匹配异常_第2张图片
Shiro 自定义filter匹配异常_第3张图片

funny,结果出乎意料,居然登陆接口走了咱们的那个自定义 Filter??黑人问号脸。。。

问题排查 FilterChain

首先检查 Shiro FilterChain 加载的顺序是否异常。

Shiro 自定义filter匹配异常_第4张图片

1、集合容器使用 LinkedHashMap,保证的 FilterChain 的顺序。

2、从数据库读取 Filter 时也是按 sort 排序的。

从调试结果来看,加载顺序和数据并没有任何问题,都是正确的。

排除了自身的数据问题,那就要往深处挖掘原因了,有了之前解决 Quartz 问题的经历,这次毫不犹豫就决定跟源码跟踪 Filter 注册到匹配的过程。

Filter 注册

要查明白为何匹配异常,就要先弄清楚咱们的自定义 Filter 是如何注册到 Shiro 的,显然,问题的关键在于 ShiroFilter 返回的 ShiroFilterFactoryBean 这个类中,我们打开看看。很快,我们就锁定了关键 method:






参考文献:Shiro自定义filter匹配异常 - _Hill3

你可能感兴趣的:(Shiro 自定义filter匹配异常)