文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

过滤器和拦截器总结

2023-09-07 06:12

关注

        过滤器和拦截器在日常业务开发中不是经常用到,近来项目中偶尔遇到了,对过滤器和拦截器进行了一次系统学习,现总结如下。

        1.1 什么是过滤器

                过滤器是Servlet的高级特性之一,是实现Filter接口的Java类。其基本功能就是对servlet的调用进行干预,在servl请求和响应的过程中增加一些特定的功能。可以使用过滤器实现的功能有:统一编码,URL级别的权限访问控制,过滤敏感词汇,压缩请求信息。

        1.2  过滤器的执行

                


   

1.3 Filter接口

        通过看Filter接口代码,其有三个方法:

           

public interface Filter {    default void init(FilterConfig filterConfig) throws ServletException {    }    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;    default void destroy() {    }}

       init(FilterConfig conf)方法:用于执行过滤器的初始化工作,web容器会在web项目启动时自动调用该方法。

        doFilter(ServletRequest request,SerlvetResponse response,FilterChain chain)方法:当请求和响应被过滤器拦截后,都会交给doFilter来处理:其中两个参数分别是被拦截request和response对象,可以使用chain的doFliter方法来放行。

        destroy()方法:用于释放关闭Filter对象打开的资源,在web项目关闭时,由web容器自动调用该方法。

1.4 如何开发一个Filter

        开发一个过滤器比较简单,第一步实现Filter接口,第二步配置过滤器

开发一个简单的filter代码如下:

package com.lsl.mylsl.filter;import org.springframework.http.HttpHeaders;import org.springframework.http.ResponseCookie;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Enumeration;@Component@WebFilter(filterName = "myFilter",urlPatterns = {"@Configurationpublic class MyInterceptorConfig implements WebMvcConfigurer {        @Override    public void addInterceptors(InterceptorRegistry registry){        registry.addInterceptor(myInterceptor())                .addPathPatterns("/api/lsl    @Bean    public MyInterceptor myInterceptor(){        return new MyInterceptor();    }}

拦截器是基于java的反射机制的,而过滤器是基于函数回调(职责链)

过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

拦截器可以访问action上下文、值栈里的对象,而过滤器不能

在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

拦截器可以获取IOC容器中的各个bean,而过滤器不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

过滤器属于Servlet,而拦截器属于springmvc

过滤器可以拦截所有请求,包括访问静态资源的请求,拦截器只能拦截action请求,即访问controller的请求。

通俗理解:
(1)过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(理解:就是一堆字母中取一个B)
(2)拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。(理解:就是一堆字母中,干预它,通过验证的少点,顺便干点别的东西

过滤器和拦截器图解

在这里插入图片描述

来源地址:https://blog.csdn.net/dhklsl/article/details/127533485

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯