Spring Boot + Jetty + SSL端口

Kum*_*hav 1 embedded-jetty spring-boot

如何配置Spring Boot以在443处使用HTTPS端口运行Jetty.配置还应注意生成密钥.

简而言之,以下maven插件的等效配置,: -

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>keytool-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <phase>generate-resources</phase>
      <id>clean</id>
      <goals>
        <goal>clean</goal>
      </goals>
    </execution>
    <execution>
      <phase>generate-resources</phase>
      <id>genkey</id>
      <goals>
        <goal>generateKeyPair</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
    <dname>cn=my.hostname.tld</dname>
    <!-- put your CN here -->
    <keypass>jetty6</keypass>
    <storepass>jetty6</storepass>
    <alias>jetty6</alias>
    <keyalg>RSA</keyalg>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

和:-

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <version>6.1.26</version>
  <configuration>
    <jvmArgs>-Xmx2048m -Xms1536m -XX:PermSize=128m -XX:MaxPermSize=256m</jvmArgs>
    <!-- http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin -->
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <connectors>
      <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
        <port>9999</port>
        <maxIdleTime>60000</maxIdleTime>
      </connector>
      <connector implementation="org.mortbay.jetty.security.SslSocketConnector">
        <port>9993</port>
        <maxIdleTime>60000</maxIdleTime>
        <keystore>${project.build.directory}/jetty-ssl.keystore</keystore>
        <password>jetty6</password>
        <keyPassword>jetty6</keyPassword>
      </connector>
    </connectors>
    <contextPath>/</contextPath>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

Hai*_*Dog 8

从Spring Boot 1.1.7开始,您可以将Jetty和Tomcat配置为通过属性文件中的三个属性使用SSL,如Spring Boot文档中所示

通过这些属性配置SSL将启用HTTPS并禁用HTTP,因为仅使用属性文件不允许这两者.如果要同时提供服务,Spring建议您通过属性配置HTTPS(SSL)并以编程方式配置HTTP.


arg*_*oth 6

我找到了这个解决方案 这对我来说可以.此方法可以支持HTTP和HTTPS.

@Component
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof JettyEmbeddedServletContainerFactory) {
                customizeJetty((JettyEmbeddedServletContainerFactory) container);
            }
        }

        private void customizeJetty(JettyEmbeddedServletContainerFactory container) {

    container.addServerCustomizers(new JettyServerCustomizer() {

        @Override
        public void customize(Server server) {

            // HTTP
            ServerConnector connector = new ServerConnector(server);
            connector.setPort(requestHttpPort());

            // HTTPS
            SslContextFactory sslContextFactory = new SslContextFactory();
            sslContextFactory.setKeyStorePath("mykeystore.jks");
            sslContextFactory.setKeyStorePassword("1234");

            HttpConfiguration https = new HttpConfiguration();
            https.addCustomizer(new SecureRequestCustomizer());

            ServerConnector sslConnector = new ServerConnector(
                    server,
                    new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
                    new HttpConnectionFactory(https));
            sslConnector.setPort(requestHttpsPort());

            server.setConnectors(new Connector[] { connector, sslConnector });

        }
    });
}
Run Code Online (Sandbox Code Playgroud)