拦截器和过滤器

Posted ToSun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拦截器和过滤器相关的知识,希望对你有一定的参考价值。

拦截器(interceptor)

Java中动态截取Action调用的对象,可以在方法的前后执行,拦截器的使用并不影响其他代码,是springMVC框架自己的;拦截器的使用用来实现一些特定的功能:如日志记录、权限检查、性能监控等,它只会拦截访问控制器方法,也是AOP思想具体应用~~~~~~~~~~~~

监控器的实现步骤

1)定义类用来实现接口HandlerINterceptor   注册
2)Component 标记在类上,spring自动扫描,创建对象
3)重写方法
    a、preHandle 方法执行之前
        这个方法返回一个boolean值
        true代表放行
        false不放行
    b、postHandle 方法执行之后
    c、afterCompletion 方法执行最后
4)定义类用来实现WebMvcConfigurer,用Configuration标记,作用是告诉spring这是配置类
Autowired依赖注入
5)重新addInterceptors方法
registry.addInterceptor()

拦截链

当有多个拦截器时,会形成拦截链,执行出入顺序按执行顺序,先进后出~~~~

过滤器

过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
作用
请求和回应的过滤,传入request、response提前过滤掉一些信息,或者提前设置一些参数,然后传入servlet或者spring的actio进行业务逻辑,过滤掉非法url和非法字符

拦截器和过滤器的区别

1)机制:拦截器是动态代理(反射机制),过滤器是函数回调
2)拦截器不依赖servl容器,过滤器需要
3)拦截器可以在方法前后实现,过滤器只能在请求前后各调用一次
4)拦截器可以利用依赖注入,因此在框架中,优先拦截器
5)拦截器包裹在过滤器之中

高并发时间获取

ThreadLocal<Long> startTimeTL =new ThreadLocal<>();
long startTime = System.currentTimeMillis();
    startTimeTL.set(startTime);
    long startTime =startTimeTL.get();~~~~

以上是关于拦截器和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

拦截器和过滤器区别

拦截器和过滤器

java web 过滤器跟拦截器的区别和使用

使用Dropwizard的Jersey过滤器,拦截器和MessageBodyReader

Java中的过滤器和拦截器

java web 过滤器跟拦截器的区别和使用