简介
Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在继续Servlet容器的Filter链的执行之前,通过ProxiedFilterChain
对Servlet容器的FilterChain进行了代理 即先走Shiro自己的Filter体系,然后才会委托给Servlet容器的FilterChain进行Servlet容器级别的Filter链执行
Shiro的ProxiedFilterChain
执行流程 - 先执行Shiro自己的Filter链 - 再执行Servlet容器的Filter链(即原始的Filter)
而ProxiedFilterChain是通过FilterChainResolver根据配置文件中[urls]部分是否与请求的URL是否匹配解析得到的
即传入原始的chain得到一个代理的chain
Shiro内部提供了一个路径匹配的FilterChainResolver实现:PathMatchingFilterChainResolver 其根据[urls]中配置的url模式(默认Ant风格) 即根据过滤器链和请求的url是否匹配来解析得到配置的过滤器链 而PathMatchingFilterChainResolver内部通过FilterChainManager
维护过滤器链 比如DefaultFilterChainManager
维护着url模式与过滤器链的关系 因此我们可以通过FilterChainManager进行动态动态增加url模式与过滤器链的关系
DefaultFilterChainManager会默认添加org.apache.shiro.web.filter.mgt.DefaultFilter
中声明的过滤器