2015-02-04 16 views
5

Wie sollte ich Jetty mit SSL-Anschluss in Spring Boot 1.2.x konfigurieren?Anlegesteg mit SSL im Frühling Boot 1.2.1

Die folgende Konfiguration funktioniert für Spring Boot 1.1.6, gibt aber 'SslSocketConnector kann nicht auf einen Typ' Fehler für die Version 1.2.1 aufgelöst werden.

@Configuration 
@EnableAutoConfiguration 
public class OptosoftOAuthSecurityApplication implements 
     EmbeddedServletContainerCustomizer { 

    public static void main(String[] args) { 
     SpringApplication.run(OptosoftOAuthSecurityApplication.class, args); 
    } 

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

    public void customizeJetty(
      JettyEmbeddedServletContainerFactory containerFactory) { 
     containerFactory.addServerCustomizers(jettyServerCustomizer()); 
    } 

    @Bean 
    public JettyServerCustomizer jettyServerCustomizer() { 
     return new JettyServerCustomizer() { 

      @Override 
      public void customize(Server server) { 
       SslContextFactory sslContextFactory = new SslContextFactory(); 
       sslContextFactory.setKeyStorePassword("jetty6"); 
       try { 
        sslContextFactory.setKeyStorePath(ResourceUtils.getFile(
          "classpath:jetty-ssl.keystore").getAbsolutePath()); 
       } catch (FileNotFoundException ex) { 
        throw new IllegalStateException("Could not load keystore", 
          ex); 
       } 

       // THIS CLASS cannot be resolved !!!!!! 
       SslSocketConnector sslConnector = new SslSocketConnector(
         sslContextFactory); 
       sslConnector.setPort(9443); 
       sslConnector.setMaxIdleTime(60000); 
       server.addConnector(sslConnector); 
      } 
     }; 
    } 

    @Bean 
    @ConditionalOnMissingBean(RequestContextListener.class) 
    public RequestContextListener requestContextListener() { 
     return new RequestContextListener(); 
    } 
} 

Mein pom.xml (Frühjahr Boot-Version ist 1.2.1 in Mutter POM): -

<dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
        <groupId>org.springframework.boot</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security.oauth</groupId> 
      <artifactId>spring-security-oauth2</artifactId> 
     </dependency> 
    </dependencies> 

Antwort

8

Die Klasse, die Sie verwenden möchten, ist spezifisch für Jetty 8 aber Frühlings-Boot 1.2. x verwendet Jetty 9 standardmäßig. In Spring Boot 1.2 können Sie nun SSL deklarativ in application.properties konfigurieren. Dies wird in spring-boot-sample-jetty-ssl veranschaulicht.

server.port = 9443 
server.ssl.key-store = classpath:jetty-ssl.keystore 
server.ssl.key-store-password = jetty6 

Frühlings-Boot unterstützt nur deklarative Konfiguration eines einzelnen Stecker:

Sie können Ihre EmbeddedServletContainerCustomizer Umsetzung mit den folgenden Eigenschaften erklärt in application.properties ersetzen. Wenn Sie möchten, dass der Server über HTTP und HTTPS erreichbar ist, müssen Sie eine davon programmatisch konfigurieren. Ich empfehle, dass der HTTP-Connector programmatisch konfiguriert wird, da weniger Code involviert ist:

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

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

     private void configureJetty(JettyEmbeddedServletContainerFactory jettyFactory) { 
      jettyFactory.addServerCustomizers(new JettyServerCustomizer() { 

       @Override 
       public void customize(Server server) { 
        ServerConnector serverConnector = new ServerConnector(server); 
        serverConnector.setPort(8080); 
        server.addConnector(serverConnector); 
       } 
      }); 
     } 
    }; 
} 
+0

Wie kann ich den HTTP-Port angeben? –

+0

Sie möchten sowohl den HTTPS- als auch den HTTP-Zugriff konfigurieren? –

+0

Ja. Ich brauche beides. –

Verwandte Themen