1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。过滤器可以修改request,而拦截器不能.
2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。拦截器是属于spring的一个组件,因此可以使用spring的所有资源,对象,如service对象,数据源,事务控制等,而过滤器就不行。
3、过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射,过滤器只能在请求的前后使用,而拦截器可以详细到每个方法,Filter还在servlet前后起作用。而拦截器能够深入到方法前后,异常抛出前后,因此拦截器具有更大的弹性,所有在spring框架中应该优先使用拦截器。
4、Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
5、Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。
6、Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
1)过滤敏感词汇(防止sql注入)
2)设置字符编码
3)URL级别的权限访问控制
4)压缩响应信息
1.登录验证,判断用户是否登录。
2.权限验证,判断用户是否有权限访问资源,如校验token
3.日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
4.处理cookie、本地化、国际化、主题等。
5.性能监控,监控请求处理时长等。
6.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)
正常运行顺序为:filter-interceptor-controllerAdvice-aspect-controller
异常情况下:controller-aspect-controllerAdvice-interceptor-filter
各类web service ,其中 注解 的化名挺有意思
@Service("ss")
public class PermissionService
{
应用场景为 @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
框架的部分能够读懂,了解核心的内容即可,并不需要面面俱到,用到的时候能够想起来,并且知道如何用即可,毕竟技术那么多,我们精力那么有限,需要根据自己要解决的目标来学习技术,不然谁的脑袋也受不了那一坨坨的技术。