SpringBoot项目中filter的两种使用详解

 更新时间:2025年10月29日 14:47:03   作者:0和1搭建网络世界  
文章介绍了两种方式在Spring Boot中创建和配置过滤器:使用`@WebFilter`注解和`@ServletComponentScan`注解,以及通过`@Bean`注解自定义过滤器并加载到IOC容器,通过测试启动项目并访问指定URL,可以查看控制台打印的过滤器执行顺序结果

一、添加依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>

二、@WebFilter方式

@WebFilter(filterName = "myFilter",urlPatterns = "/*")
@Slf4j
@Order(value = 2) //存在多个filter时 指定filter执行顺序
public class MyFilter02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("=======过滤器初始化2=======");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        log.info("过滤器2:请求的sessionID为{},请求的url为{}",httpServletRequest.getSession().getId(),httpServletRequest.getRequestURL());
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
@SpringBootApplication
@ServletComponentScan
public class SpringBootFiltrApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootFiltrApplication.class,args);
    }
}

启动类中@ServletComponentScan注解和@WebFilter注解配合使用,@ServletComponentScan注解会自动扫描带有@WebFilter注解的类

三、@Bean注解方式

先自定义一个过滤器:

@Slf4j
public class MyFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("=====初始化过滤器1======");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        log.info("过滤器1:请求路径:{}",httpServletRequest.getRequestURL());
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

将自定义的过滤器加载到ioc容器中

@Configuration
public class AddFilters {

    @Bean
    public FilterRegistrationBean addFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter01());
        filterRegistrationBean.setOrder(1);
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}

上面可以看出,通过两种方式分别创建了filter01和filter02两个过滤器,并分别指定了他们执行的顺序

三、测试

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/getUserInfo")
    public String getUserInfo(){
        return "获取成功";
    }
}

启动项目:访问http://localhost:8080/user/getUserInfo

查看控制台打印的结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于使用swagger整合springMVC的方法

    关于使用swagger整合springMVC的方法

    在平时开发写接口文档的工作时,一般都是word文档,带来书写麻烦、维护麻烦的问题,比如改了源代码忘了更新文档、解释不明确带来歧义、无法在线尝试等等,swagger可以有效解决这类问题,需要的朋友可以参考下
    2023-04-04
  • Java实现评论回复功能的完整步骤

    Java实现评论回复功能的完整步骤

    这篇文章主要给大家介绍了关于Java实现评论回复功能的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 修改maven项目端口号的方法

    修改maven项目端口号的方法

    今天小编就为大家分享一篇修改maven项目端口号的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Eclipse配置使用web.xml的方法

    Eclipse配置使用web.xml的方法

    这篇文章主要为大家详细介绍了Eclipse配置使用web.xml的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java 字符串截取的实例详解

    java 字符串截取的实例详解

    这篇文章主要介绍了java 字符串截取的实例详解的相关资料,这里提供了实例代码帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • 如何使用ByteArrayOutputStream下载文件

    如何使用ByteArrayOutputStream下载文件

    这篇文章主要介绍了如何使用ByteArrayOutputStream下载文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot热部署启动关闭流程详解

    SpringBoot热部署启动关闭流程详解

    Spring Boot启动热部署是一种技术,它能让开发者在不重启应用程序的情况下实时更新代码。这样可以提高开发效率,避免频繁重启应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • Java实现一个敏感词过滤有哪些方法以及怎么优化详解

    Java实现一个敏感词过滤有哪些方法以及怎么优化详解

    我们在开发系统或者应用的过程中,经常需要对用户提交的评论或者文章进行审核,对其中的敏感词进行校验或者过滤,这篇文章主要介绍了Java实现一个敏感词过滤有哪些方法以及怎么优化的相关资料,需要的朋友可以参考下
    2025-07-07
  • 详解记录Java Log的几种方式

    详解记录Java Log的几种方式

    很多小伙伴不知道如何记录日志,今天特地整理了本篇文章,文中有非常详细的介绍及代码示例,对小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • 简化API提升开发效率RestTemplate与HttpClient OkHttp关系详解

    简化API提升开发效率RestTemplate与HttpClient OkHttp关系详解

    这篇文章主要为大家介绍了简化API,提升开发效率,RestTemplate与HttpClient OkHttp关系介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论