Shiro的过滤链设计机制

Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在继续Servlet容器的Filter链的执行之前,通过ProxiedFilterChain对Servlet容器的FilterChain进行了代理 即先走Shiro自己的Filter体系,然后才会委托给Servlet容器的FilterChain进行Servlet容器级别的Filter链执行 Shiro的ProxiedFilterChain执行流程

1.先执行Shiro自己的Filter链

2.再执行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中声明的过滤器。
shiro交给spring管理后,我们可以在web.xml中定义过滤,但是这样的过滤显得粗粒化了,因为只是给了一个/*:我们可以在shiro的xml文件里进行定义过滤链,这样更加的细粒化 这样我们就可以定义过滤链了,其中,/**表示拦截所有的请求和静态资源文件,过滤链其实说起来也很简单,过滤的目的要么是放行通过要么是拦截不让其通过,这里的anon就是通过,authc就是不让其通过,我们可以在这个value标签可以写无限多个放行与拦截,所以感觉上就形成了一个链式结构。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值