如何使用 spring.factories 添加 Servlet 过滤器

How to add Servlet filter using spring.factories

背后的想法是创建小型库,如果将库添加到项目中,它将自动注册 servlet 过滤器。

也许有人更清楚如何对用户透明地做到这一点,支持 Spring 引导和最重要的普通 Spring(对于旧版应用程序)?

Configuration class 中创建 Servlet bean,如下所示:

@Bean
public ServletRegistrationBean envServlet() {
    EnvServlet envServlet = new EnvServlet();
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(envServlet, "/boot/env");
    servletRegistrationBean.setName("bootEnvServlet");
    return servletRegistrationBean;
}

spring 会将 org.springframework.boot.context.embedded.RegistrationBean 的子 class 注册到 servlet 容器。

你可以很简单地做到这一点,你必须做几件事:

1) 为具有适当依赖项的 JAR 模块创建适当的 maven/gradle 配置。

2) 使用您的过滤器配置创建配置 class。例如:

package com.test;

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean contextFilterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        RequestContextFilter contextFilter = new RequestContextFilter();
        registrationBean.setFilter(contextFilter);
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

3) 创建文件 src/main/resources/META-INF/spring.factories 并添加:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.test.FilterConfig

4) publish/install 您的 jar 并将其作为 Spring 启动应用程序的依赖项包含在内。

在此之后,FilterConfig 应该在每个 Spring 启动应用程序中自动加载,您添加使用 @EnableAutoConfiguration 的依赖项(即通过使用注释 @SpringBootApplication)。