如何使用 spring.factories 添加 Servlet 过滤器
How to add Servlet filter using spring.factories
- 是否可以使用 Spring
ApplicationContextInitializer
注册新的 servlet 过滤器?
- 或者有没有一种方法可以访问在
spring.factories
中指定自定义 class 的 ServletContext?
背后的想法是创建小型库,如果将库添加到项目中,它将自动注册 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
)。
- 是否可以使用 Spring
ApplicationContextInitializer
注册新的 servlet 过滤器? - 或者有没有一种方法可以访问在
spring.factories
中指定自定义 class 的 ServletContext?
背后的想法是创建小型库,如果将库添加到项目中,它将自动注册 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
)。