浅谈过滤器与拦截器的区别 - 极悦
首页 课程 师资 教程 报名

浅谈过滤器与拦截器的区别

  • 2022-05-05 09:22:30
  • 490次 极悦

过滤器

需要在 web XML 中的配置,依赖于 servlet 容器,是基于函数回调的。它几乎可以过滤所有请求,但缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是做一些过滤操作,获取我们想要获取的数据。比如在Java Web中,对于传入的请求和响应,预先过滤掉一些信息,或者预先设置一些参数,然后传入servlet或者controller进行业务逻辑操作。常用场景有:修改过滤器中的字符编码过滤器,修改过滤器(xssfilter)中HttpServletRequest的一些参数,如过滤粗俗文本、危险字符等。

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <servlet-name>/*</servlet-name>
</filter-mapping>

拦截器

拦截器需要在spring MVC中配置。它们依赖于框架并且是基于 Java 的反射机制

Spring MVC中的拦截器相当于web开发中的过滤器,用于过滤控制器的Preprocessing(预增强)和Post processing(后增强)

由多个拦截器组成的链称为拦截器链(Interceptor chain)

访问被拦截(特定目标控制器)方法时,拦截器链中的拦截器会按照之前定义的顺序被调用

拦截器也是AOP思想的具体实现

Prehandle——在被拦截的目标方法执行之前执行。

Posthandle是在拦截的目标方法执行完毕并获得返回值后执行。

Aftercompletion 在目标方法完成渲染视图层后执行。

拦截器,在进入控制器之前进行拦截。

实现 handlerinterceptor 接口和 prehandler 方法。如果返回true,则可以调用控制器方法,如果返回false,则不会调用控制器

Spring MVC XML 配置

功能:权限控制(认证,是否有登录),微服务的链接跟踪,记录用户的访问日志

拦截器和过滤器的区别

不同之处 过滤器 拦截器
使用范围 是 servlet 规范的一部分,可供任何 Java Web 项目使用 它是 Spring MVC 自己的。只有使用spring MVC框架才能使用拦截器
拦截范围 配置urlpatterns="/*"后,可以拦截所有要访问的资源 如果/* *,则dispatcher servlet捕获的资源(请求)将被拦截
拦截精度 你只能拦截一个请求,不能拦截servlet中的一个方法, 可以细化为在控制器中拦截一个方法

通过上述介绍,相信大家对浅谈过滤器与拦截器的区别已经有所了解,大家如果想了解更多相关知识,不妨来关注一下极悦的Filter过滤器教程,里面的教程内容细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交