我想从Spring MVC迁移到Spring Webflux,但是我从第三方使用了一些servlet过滤器和web servlet,必须迁移到等效的Webflux版本。
但这不可行,因为它们来自第三方框架。
例如:H2服务器WebServlet
和MetricsServlet
以及InstrumentedFilter
。
有没有办法将servlet或servlet过滤器转换为等效的Webflux版本?
答案 0 :(得分:0)
您可以使用tomcat作为webflux实现(您可以通过排除netty starter并包括tomcat starter来实现此目的。)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
您可以通过创建WebServerFactoryCustomizer<TomcatReactiveWebServerFactory>
bean并通过Context
接口添加过滤器来添加servlet过滤器。例如:
@Bean
public WebServerFactoryCustomizer<TomcatReactiveWebServerFactory> customizer() {
return factory -> factory.addContextCustomizers(
context -> {
FilterDef filterDef = new FilterDef();
filterDef.setFilterName("name");
filterDef.setFilter(new SomeFilter());
FilterMap filterMap = new FilterMap();
filterMap.setFilterName("name");
filterMap.addURLPattern("/url/pattern");
context.addFilterMap(filterMap);
context.addFilterDef(filterDef);
}
);
}
配置为webflux“实现”时,tomcat Servlet的默认名称为httpHandlerServlet