shiro和Spring Security相同的是,shiro在做权限拦截时也是基于拦截器链和一些拦截器的。
shiro使用了与Servlet一样的Filter接口进行扩展。
第一个介绍的是NameableFilter,其实是给Filter起了个名字,如果没有设置,默认就是FilterName,当我们组装拦截器链时,会根据这个名字找到相应的拦截器实例。
OncePerRequestFilter:它主要是用来防止多次执行Filter的,也就是说一次请求只会走一次拦截器链,另外它提供了Enable属性,表示是否开启该拦截器实例,默认是开启。如果不想让某个拦截器工作,可以设置为false即可。
ShiroFilter:它是整个shiro的入口点,用于拦截需要安全控制的请求进行处理
AdviceFilter:它提供了AOP的知识,类似于SpringMVC中的Intercepto
preHandle方法,它类似于AOP中的前置增强,在拦截器链执行之前执行,如果返回true则表示继续拦截链,否则中断后续的
拦截器链执行,直接返回。通常进行预处理,比如基于表单的验证,权限等等。
postHandle方法,它类似于AOP中的后置返回增强,在拦截器链执行完成后执行,进行后续的处理,比如记录执行的时间之类等等
afterCompletion方法,这个方法它类似于AOP中的后置最终增强,不管有没有异常它都会执行,可以进行清理资源,比如解除subject与线程间的绑定之类等等
PathMatchingFilter:它提供一套基于ant风格的,请求路径匹配功能,以及拦截器的参数解析功能。
pathsMatch:该方法用于path与请求路径进行匹配的方法,如果匹配,那么它返回true,
preHandle方法:在preHandle方法中,当pathsMatch方法匹配到一个路径后,它会调用onpreHandle方法,并将路径绑定参数配置给map的value,然后可以在这个方法中进行一些验证,比如角色授权,如果验证失败可以返回false中断流程,默认返回为true
网友评论