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使用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java图论普利姆及克鲁斯卡算法解决最小生成树问题详解

    java图论普利姆及克鲁斯卡算法解决最小生成树问题详解

    这篇文章主要为大家介绍了java图论普利姆算法及克鲁斯卡算法解决最小生成树问题的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • 使用@DS轻松解决动态数据源的问题

    使用@DS轻松解决动态数据源的问题

    这篇文章主要介绍了使用@DS轻松解决动态数据源的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 关于MVC的dao层、service层和controller层详解

    关于MVC的dao层、service层和controller层详解

    这篇文章主要介绍了关于MVC的dao层、service层和controller层详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java volatile关键字特性讲解下篇

    Java volatile关键字特性讲解下篇

    JMM要求保证可见性、原子性、有序性,volatile可以保证其中的两个,本篇文章具体验证volatile的可见性,不原子性和禁重排,同时解决volatile的不保证原子性,让代码具有原子性
    2022-12-12
  • Java多线程饥饿与公平介绍及代码示例

    Java多线程饥饿与公平介绍及代码示例

    这篇文章主要介绍了Java多线程饥饿与公平介绍及代码示例,分析饥饿产生的原因以及相关实例,然后就在java中实现公平性问题做了详细解析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • springboot如何通过@Value,@ConfigurationProperties获取配置

    springboot如何通过@Value,@ConfigurationProperties获取配置

    这篇文章主要介绍了springboot如何通过@Value,@ConfigurationProperties获取配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java用20行代码实现抖音小视频批量转换为gif动态图

    Java用20行代码实现抖音小视频批量转换为gif动态图

    这篇文章主要介绍了Java用20行代码实现抖音小视频批量转换为gif动态图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 如何解决Springboot Dao注入失败的问题

    如何解决Springboot Dao注入失败的问题

    这篇文章主要介绍了如何解决Spring boot Dao注入失败的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java分布式ID中Snowflake雪花算法应用实现

    Java分布式ID中Snowflake雪花算法应用实现

    Snowflake算法作为一种高效且易于实现的分布式ID生成方案,能够很好地满足分布式系统中对全局唯一ID的需求,本文就来介绍一下Java分布式ID中Snowflake雪花算法应用实现,感兴趣的可以了解一下
    2024-07-07
  • Spring Data JPA 如何使用QueryDsl查询并分页

    Spring Data JPA 如何使用QueryDsl查询并分页

    这篇文章主要介绍了Spring Data JPA 如何使用QueryDsl查询并分页,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论