Acontece que há uma maneira de fazer isso, embora eu não tenho certeza que eu encontrei a maneira 'apropriada' uma vez que este horas necessárias de leitura de código fonte de vários projetos. Em outras palavras, isso pode ser um monte de trabalho mudo (mas funciona).
Em primeiro lugar, não há nenhuma maneira de obter no server.xml no Tomcat embutido, quer para aumentá-lo ou substituí-lo. Isso deve ser feito por meio de programação.
Em segundo lugar, a definição dos require_https 'não ajuda, já que não é possível definir informações cert dessa forma. Ele não configurar o encaminhamento de http para https, mas não lhe dá uma maneira de fazer https trabalhar para que o is not forwarding útil. No entanto, usá-lo com o material abaixo, que faz tornar o trabalho https.
Para começar, você precisa fornecer um EmbeddedServletContainerFactorycomo explicado nos documentos de apoio Servlet Container incorporados . Os documentos são para Java, mas o Groovy ficaria praticamente o mesmo. Note que eu não tenho sido capaz de obtê-lo a reconhecer a @Valueanotação usada em seu exemplo, mas não é necessário. Para groovy, basta colocar isso em um novo arquivo .groovy e incluir esse arquivo na linha de comando quando você iniciar springboot.
Agora, as instruções dizem que você pode personalizar a TomcatEmbeddedServletContainerFactoryclasse que você criou na esse código para que você possa alterar o comportamento web.xml, e isso é verdade, mas para os nossos propósitos é importante saber que você também pode usá-lo para adequar server.xmlo comportamento. Na verdade, lendo a fonte para a classe e comparando-a com os docs Tomcat integrado, você vê que este é o único lugar para fazer isso. A função interessante é TomcatEmbeddedServletContainerFactory.addConnectorCustomizers(), que não pode olhar como muito com os Javadocs mas realmente dá-lhe o objeto Tomcat incorporado para personalizar-se. Simplesmente passar sua própria implementação TomcatConnectorCustomizere definir as coisas que você quer em um determinado Connectorna void customize(Connector con)função. Agora, há cerca de um bilhão de coisas que você pode fazer com o Connectore eu não poderia encontrar docs úteis para ele, mas ocreateConnector()função neste este caras projeto-Tomcat incorporado-Spring pessoal é um guia muito prático. Minha implementação acabou com essa aparência:
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;
}
}
O autowiring vai pegar essa implementação uma corrida com ele. Uma vez que eu fixo meu arquivo de armazenamento de chaves preso (certifique-se de chamar keytool com -storetype pkcs12, e não -storepass pkcs12como relatado em outros lugares), isso funcionou. Além disso, seria muito melhor para fornecer os parâmetros (porto, senha, etc.) como definições de configuração para testes e tal ... Eu tenho certeza que é possível se você pode obter a anotação @value para trabalhar com Groovy.