2017.2.12 开涛shiro教程-第八章-拦截器机制
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398
根据下载的pdf学习。
1.拦截器介绍
下图是shiro拦截器的基础类图:
1.NameableFilter
NameableFilter给Filter起个名字,如果没有设置,默认就是FilterName。比如之前的authc,当组装拦截器链的时候会根据这个名字找到相应的拦截器实例。
2.OncePerRequestFilter
OncePerRequestFilter用于防止多次执行Filter,即一次请求只会走一次拦截器链。另外提供enabled属性,enabled=true表示开启该拦截器,enable=false表示关闭该拦截器。
3.ShiroFilter
ShiroFilter整个shiro的入口。
4.AdviceFilter
AdviceFilter提供了很多AOP风格的支持,类似于SpringMVC中的Interceptor。
1 boolean preHandle(ServletRequest request, ServletResponse response) throws Exception 2 void postHandle(ServletRequest request, ServletResponse response) throws Exception 3 void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception;
(1)preHandler
preHandler 类似于AOP的前置增强。在拦截器链执行前执行。返回true则继续拦截器链,否则中断后续的拦截器链。用于预处理,如基于表单的身份验证、授权。
(2)postHandler
postHandler 类似于AOP的后置返回增强。在拦截器链执行完成后执行。用于后处理,如记录执行时间等。
(3)afterCompletion
afterCompletion类似于AOP的后置最终增强,即不管有没有异常都会执行的部分。用于进行一些比如清理资源(Subject与线程的绑定等)的操作。
5.PathMatchingFilter
PathMatchingFilter 用于提供基于Ant 风格的请求路径匹配,及拦截器参数解析等功能。
1 boolean pathsMatch(String path, ServletRequest request) 2 boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception
(1)pathsMatch