Filter在springboot中的使用方法详解

 更新时间:2023年08月12日 10:35:30   作者:bibiwannbe  
这篇文章主要介绍了Filter在springboot中的使用方法详解,filter(过滤器)作用于在intreceptor(拦截器)之前,不像intreceptor一样依赖于springmvc框架,只需要依赖于serverlet,需要的朋友可以参考下

Filter 过滤器

Filter何时进行url过滤

filter(过滤器)作用于在intreceptor(拦截器)之前,不像intreceptor一样依赖于springmvc框架,只需要依赖于serverlet。

Filter在spring /springboot中如何使用

1.自定义Filter

比较原始的一种方法是定义一个MyFilter实现javax.servlet.Filter接口

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 对request或 response 进行处理
        // 调用filter链中的下一个filter
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

另一种方法的自定义Filter,继承springframework.web.filter.OncePerRequestFilter,可以对同一个请求,只经过一次过滤

public class MyFilter extends OncePerRequestFilter {
    /**此处不能@override doFilter方法
     *  因为OncePerRequestFilter中 doFilter方法已经是final
     *
     */
    //自定义处理方法
    public void interrupt(HttpServletResponse response, ErrorCode code){
        //此处对response进行处理
    }
    //重载OnecePerRequestFilter方法
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){
    //调用自定义处理方法
    interrupt(response,code);
    //对request 、response进行处理
    }
}

OncePerRequestFilter中的方法

修饰符和类型方法和描述
voiddoFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
此doFilter实现存储“已过滤”的请求属性,如果属性已经存在,则继续进行而不再过滤。
protected abstract voiddoFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)和doFilter相同功能,但保证在单个请求线程中每个请求只调用一次。
protected java.lang.StringgetAlreadyFilteredAttributeName()
返回标识已过滤请求的请求属性的名称。
protected booleanisAsyncDispatch(HttpServletRequest request)
javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。
protected booleanisAsyncStarted(HttpServletRequest request)
请求处理是否处于异步模式,这意味着在退出当前线程后不会提交响应
protected booleanshouldNotFilter(HttpServletRequest request)
可以在子类中重写以进行自定义筛选控制,返回true以避免过滤给定的请求。
protected booleanshouldNotFilterAsyncDispatch()
javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。
protected booleanshouldNotFilterErrorDispatch()
是否过滤错误调度,例如servlet容器处理和映射错误时web.xml

2.注册自定义Filter

在springboot中可以写一个配置类,使用@Bean注入myFilterBean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@Configuration
public class MyFilterConfig {
   @Bean
    public FilterRegistrationBean myFilterBean(MyFilter filter) {
        FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(filter);//设置为自定义的过滤器MyFilter
        filterRegistrationBean.addUrlPatterns("/*");//拦截所有请求
        filterRegistrationBean.setOrder(1);//优先级为1
        return filterRegistrationBean;
    }
    //可注册多个自定义的过滤器
}

如果是使用xml配置则在web.xml配置如下( 注意配置多个filter时优先级由filter的配置顺序决定优先级)

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.text.filter.myFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

到此这篇关于Filter在springboot中的使用方法详解的文章就介绍到这了,更多相关Filter使用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea如何快速查找一个类或类中方法名和变量

    idea如何快速查找一个类或类中方法名和变量

    这篇文章主要介绍了idea如何快速查找一个类或类中方法名和变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Spring循环依赖实现过程揭秘

    Spring循环依赖实现过程揭秘

    这篇文章主要介绍了Spring循环依赖实现过程,Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式
    2023-01-01
  • Mybatis Plus使用XML编写动态sql的超简易方法

    Mybatis Plus使用XML编写动态sql的超简易方法

    这篇文章主要介绍了Mybatis Plus使用XML编写动态sql的超简易方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 基于JAVA的短信验证码api调用代码实例

    基于JAVA的短信验证码api调用代码实例

    这篇文章主要为大家详细介绍了基于JAVA的短信验证码api调用代码实例,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Java实现平滑加权轮询算法之降权和提权详解

    Java实现平滑加权轮询算法之降权和提权详解

    所有负载均衡的场景几乎都会用到这个平滑加权轮询算法,下面这篇文章主要给大家介绍了关于Java实现平滑加权轮询算法之降权和提权的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • SpringCloud整合分布式服务跟踪zipkin的实现

    SpringCloud整合分布式服务跟踪zipkin的实现

    这篇文章主要介绍了SpringCloud整合分布式服务跟踪zipkin的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 详解Mybatis动态sql

    详解Mybatis动态sql

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。本文给大家介绍Mybatis动态sql小结,感兴趣的朋友参考下
    2016-04-04
  • 解析Orika的MapperFacade 属性赋值的使用问题

    解析Orika的MapperFacade 属性赋值的使用问题

    在我们实际开发中,常常会有对象与对象之间的转化,或者把一个对象的数据转化到另一个数据之中,如果我们手动的一个一个的set就会比较麻烦,代码段看起来也会比较长。而Orika的MapperFacade就是解决这个问题的,实现对象属性的复制
    2021-12-12
  • java模拟实现微信红包算法

    java模拟实现微信红包算法

    这篇文章主要为大家详细介绍了java实现模拟微信红包算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Mybatis-Plus select不列出全部字段的方法

    Mybatis-Plus select不列出全部字段的方法

    这篇文章主要介绍了Mybatis-Plus select不列出全部字段的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论