需要在 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大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习