これを行う方法があることがわかりましたが、これには複数のプロジェクトからソースコードを読むのに何時間も必要だったので、「適切な」方法を見つけたかどうかはわかりません. 言い換えれば、これはばかげた作業かもしれません (しかし、機能します)。
まず、組み込み Tomcat の server.xml にアクセスして、それを拡張したり置き換えたりする方法がありません。これはプログラムで行う必要があります。
第二に、「require_https」設定は、証明書情報をそのように設定できないため、役に立ちません。http から https への転送を設定しますが、https を機能させる方法は提供されないため、転送は役に立ちません。ただし、以下のものと一緒に使用すると、httpsが機能します。
まず、組み込みサーブレット コンテナ サポート ドキュメントEmbeddedServletContainerFactory
で説明されているように、を提供する必要があります。ドキュメントは Java 用ですが、Groovy はほとんど同じように見えます。例で使用されている注釈を認識させることはできませんでしたが、必要ではないことに注意してください。groovy の場合は、これを新しい .groovy ファイルに入れて、ブートの起動時にそのファイルをコマンド ラインに含めるだけです。@Value
spring
ここで、そのコードで作成したクラスをカスタマイズして、TomcatEmbeddedServletContainerFactory
web.xml の動作を変更できると説明されていますが、これは事実ですが、動作を調整するためにも使用できることを知っておくことが重要ですserver.xml
。実際、クラスのソースを読んで組み込み Tomcat のドキュメントと比較すると、これが唯一の場所であることがわかります。興味深い関数は ですTomcatEmbeddedServletContainerFactory.addConnectorCustomizers()
。これは、Javadocs からはあまり見えないかもしれませんが、実際には組み込み Tomcat オブジェクトを提供して、自分でカスタマイズすることができます。独自の実装を渡し、関数で指定さTomcatConnectorCustomizer
れたものに必要なものを設定するだけです。現在、 でできることは約 10 億ありますが、役に立つドキュメントは見つかりませんでしたが、Connector
void customize(Connector con)
Connector
createConnector()
この人の個人的なSpring-embedded-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 は、この実装を選択して実行します。バストされたキーストアファイルを修正したら(他の場所で報告されているので-storetype pkcs12
はなく、 keytool を で呼び出すようにしてください)、これは機能しました。-storepass pkcs12
また、テストなどの構成設定としてパラメーター (ポート、パスワードなど) を提供する方がはるかに良いでしょう... @Value アノテーションを取得して Groovy で動作させることができれば、それが可能であると確信しています。