过滤器(Filter)和 拦截器(Interceptor)的区别

本文介绍了Java Web中过滤器(Filter)和拦截器(Interceptor)的区别和应用场景。过滤器在web.xml中配置,适用于全局处理,如字符编码设置;拦截器基于SpringMVC,用于Controller的预处理和后处理,实现更精细的控制。文章详细讲解了拦截器的实现步骤,并讨论了如何避免拦截静态资源。
摘要由CSDN通过智能技术生成

1.过滤器(Filter)

        需要在web.xml中配置,依赖于servlet容器,是基于函数回调。它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等。

<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>

2.拦截器(Interceptor)

  • 拦截器(Interceptor)需要在SpringMVC中配置,依赖于框架,是基于Java的反射机制

  • SpringMVC中的拦截器,相当于web开发中的过滤器Filter,用于对Controller进行预处理(前置增强)后处理(后置增强)

  • 多个拦截器形成的一条链,称为拦截器链(Interceptor chain)

    • 当访问被拦截的(具体的目标Controller)方法时,拦截器链中的拦截器就会按照之前定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值