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

时间:2016-08-02 22:23:02

标签: spring servlets spring-boot servlet-filters servlet-3.0

  • 是否可以使用Spring ApplicationContextInitializer
  • 注册新的servlet过滤器
  • 或者有没有办法在spring.factories
  • 中访问指定自定义类的ServletContext

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

也许有人更清楚如何从用户那里透明地做到这一点,支持Spring Boot和最重要的普通Spring(对于遗留应用程序)?

2 个答案:

答案 0 :(得分:1)

你可以非常简单地做到这一点,你必须做一些事情:

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

2)使用Filter配置创建配置类。例如:

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)发布/安装你的jar并将其作为Spring Boot应用程序的依赖项包含在内。

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

答案 1 :(得分:0)

Configuration类中创建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的子类注册到servlet容器。