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)方法时,拦截器链中的拦截器就会按照之前定义