Ответ 1
Оказывается, есть способ сделать это, хотя я не уверен, что нашел "правильный" способ, поскольку это потребовало часов чтения исходного кода из нескольких проектов. Другими словами, это может быть много немой работы (но это работает).
Во-первых, нет способа получить на server.xml во встроенном Tomcat, чтобы либо увеличить его, либо заменить. Это должно быть сделано программно.
Во-вторых, параметр "require_https" не помогает, поскольку вы не можете установить информацию о сертификате таким образом. Он настроил переадресацию с http на https, но это не дает вам способ заставить https работать, поэтому пересылка не является полезной. Однако используйте его с приведенным ниже материалом, что делает работу https.
Для начала вам необходимо предоставить EmbeddedServletContainerFactory
, как описано в Документах поддержки контейнеров с встроенными сервлетами. Документы для Java, но Groovy будет выглядеть примерно так же. Обратите внимание, что я не смог заставить его распознать аннотацию @Value
, используемую в их примере, но ее не нужно. Для groovy просто поместите это в новый файл .groovy и включите этот файл в командную строку при запуске spring
boot.
Теперь инструкции говорят, что вы можете настроить класс TomcatEmbeddedServletContainerFactory
, который вы создали в этом коде, чтобы вы могли изменять поведение web.xml, и это правда, но для наших целей важно знать, что вы также можете используйте его, чтобы настроить поведение server.xml
. Действительно, читая исходный код для класса и сравнивая его с документами Embedded Tomcat, вы видите, что это единственное место для этого. Интересной функцией является TomcatEmbeddedServletContainerFactory.addConnectorCustomizers()
, что может не сильно напоминать Javadocs, но на самом деле дает вам объект Embedded Tomcat для настройки самостоятельно. Просто передайте свою собственную реализацию TomcatConnectorCustomizer
и задайте нужные вещи в заданном Connector
в функции void customize(Connector con)
. Теперь с Connector
есть около миллиарда вещей, и я не мог найти полезные документы для него, кроме функции createConnector()
в этом этих ребятах персональных Spring Проект-сборник-Tomcat является очень практичным руководством. Моя реализация закончилась следующим образом:
package com.deepdownstudios.server
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.*
import org.springframework.stereotype.*
@Configuration
class MyConfiguration {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
final int port = 8443;
final String keystoreFile = "/path/to/keystore"
final String keystorePass = "keystore-password"
final String keystoreType = "pkcs12"
final String keystoreProvider = "SunJSSE"
final String keystoreAlias = "tomcat"
TomcatEmbeddedServletContainerFactory factory =
new TomcatEmbeddedServletContainerFactory(this.port);
factory.addConnectorCustomizers( new TomcatConnectorCustomizer() {
void customize(Connector con) {
Http11NioProtocol proto = (Http11NioProtocol) con.getProtocolHandler();
proto.setSSLEnabled(true);
con.setScheme("https");
con.setSecure(true);
proto.setKeystoreFile(keystoreFile);
proto.setKeystorePass(keystorePass);
proto.setKeystoreType(keystoreType);
proto.setProperty("keystoreProvider", keystoreProvider);
proto.setKeyAlias(keystoreAlias);
}
});
return factory;
}
}
Autowiring подберет эту реализацию с ней. Как только я исправил свой файл с архивом хранилища (убедитесь, что вы вызываете keytool с -storetype pkcs12
, а не -storepass pkcs12
, как сообщалось в другом месте), это сработало. Кроме того, было бы намного лучше предоставить параметры (порт, пароль и т.д.) В качестве параметров конфигурации для тестирования и т.д. Я уверен, что это возможно, если вы можете получить аннотацию @Value для работы с Groovy.