В настоящее время я работаю над приложением Springboot 2.1 с включенным tomcat и HTTPS.Мы пытаемся написать несколько новых API, используя новый стек Reactive, предоставляемый spring-webflux.Поскольку приложение по-прежнему имеет традиционные блокирующие конечные точки, нам нужно использовать Tomcat с включенной поддержкой асинхронного соединения, чтобы новые неблокирующие API-интерфейсы работали.
При запуске API и попытке достичь конечной точки через HTTPS я получаю следующую ошибку:
ERROR c.b.b.c.u.s.r.c.ApiExceptionHandler - Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.
java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.
Если я отключаю HTTPS и нажимаю API, используя HTTP, запрос работает, и я получаю ответ от нового неблокирующего контроллера API.
В настоящее время HTTPSнастроен с использованием следующего кода (если я удаляю этот конфиг, не блокирующий API работает):
@Configuration
public class Config implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
private final SslProperties sslProperties;
private final LogbackAccessProperties logbackAccessProperties;
public BootConfig(SslProperties sslProperties, LogbackAccessProperties logbackAccessProperties) {
this.sslProperties = sslProperties;
this.logbackAccessProperties = logbackAccessProperties;
}
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addContextValves(getLogbackValve());
factory.addConnectorCustomizers(connector -> {
Http11NioProtocol proto = (Http11NioProtocol) connector.getProtocolHandler();
proto.setSSLEnabled(true);
connector.setScheme("https");
connector.setSecure(true);
proto.setKeystoreFile(sslProperties.getKeyStoreLocation());
proto.setKeystorePass(sslProperties.getKeyStorePassword());
proto.setKeystoreType(sslProperties.getKeyStoreType());
proto.setTruststoreFile(sslProperties.getKeyStoreLocation());
proto.setTruststorePass(sslProperties.getKeyStorePassword());
proto.setTruststoreType(sslProperties.getKeyStoreType());
proto.setKeyAlias(sslProperties.getHostingServerKeyAlias());
proto.setSslEnabledProtocols("TLSv1.2");
});
}
private LogbackValve getLogbackValve() {
LogbackValve valve = new LogbackValve();
valve.setFilename(logbackAccessProperties.getConfig());
return valve;
}
}
Чтение в Интернете. Я вижу, что Springboot по умолчанию включает async-supported
при использовании tomcat и spring-boot-starter-webflux
с spring-mvc
.Это похоже на случай использования HTTP, но при настройке HTTPS, похоже, больше не работает.Есть ли другой способ включить его при настройке HTTPS?