作用范围不同
来看一组测试,同时使用过滤器和拦截器,看看调试的结果是什么样的。
过滤器
拦截器
测试接口
测试结果
可以看到先进入断点的是过滤器,说明过滤器是在拦截器前面起作用的。
原因
过滤器是属于JavaWeb三大组件之一,不依赖框架,基于Servlet开发的都可以使用过滤器。
而拦截器是一种框架内部的实现,属于SpringMVC框架。
应用场景不同
由于过滤器不依赖于任何框架,所以功能比较单一,适合做一些预处理、过滤请求等相关的操作。
拦截器依赖于框架,功能比过滤器更强大,适合做一些带有业务场景的操作,例如身份认证、权限
控制。
问题:那为什么Shiro和SpringSecurity的底层实现原理都是基于过滤器呢?
因为过滤器是Web应用的标准,而拦截器是在框架内部基于AOP实现的切面编程,使用过滤器的扩展性会更强。