2017-02-08 2 views
0

Hallo Ich versuche, beides zu haben http & https-Protokolle verfügbar im Frühjahr Boot-Web-Service. Ich wurde im Anschluss an dieses Tutorial: https://drissamri.be/blog/java/enable-https-in-spring-boot/Redirect Post-Methode HTTP -> HTTPS - HTTP-Status 405 (Frühjahr boot)

HTTPS Post-Methode funktioniert, aber http nicht. Ich teste es über SoapUI und es wirft HTTP status 405 - Method not allowed.

Dies ist, wie Request/Response-Verfahren in Code sieht:

private static final String NAMESPACE_URI = "http://...."; 

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getRequest") 
@ResponsePayload 
public GetResponse getRequest(@RequestPayload GetRequest request){...} 

Jeder Code-Schnipsel soll ich anhängen?

Vielen Dank für die Hilfe.

Antwort

-3

Nachdem sie mit mit mehreren Tutorials Hantieren, Antwort ist offizieller Führer zu folgen ...

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-enable-multiple-connectors-in-tomcat

UPDATE:

import org.apache.catalina.connector.Connector; 
import org.apache.coyote.http11.Http11NioProtocol; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; 
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 

import java.io.File; 

@Configuration 
public class HttpsConnector { 

    @Value("${cert.keyStore}") 
    private String keyStorePath; 

    @Value("${cert.trustStore}") 
    private String trustStorePath; 

    @Value("${cert.keyStorePass}") 
    private String keyStorePass; 

    @Value("${cert.trustStorePass}") 
    private String trustStorePass; 

    @Value("${cert.keyStoreType}") 
    private String keyStoreType; 

    @Value("${cert.trustStoreType}") 
    private String trustStoreType; 

    @Value("${cert.keyAlias}") 
    private String keyAlias; 

    @Value("${cert.httpsPort}") 
    private int httpsPort; 

    @Bean 
    public EmbeddedServletContainerFactory servletContainer() { 
     TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); 
     tomcat.addAdditionalTomcatConnectors(createSslConnector()); 
     return tomcat; 
    } 

    private Connector createSslConnector() { 
     Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); 
     Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); 

     String absKeyStorePath = getAbsolutePath(keyStorePath); 
     String absTrustStorePath = getAbsolutePath(trustStorePath); 

     connector.setScheme("https"); 
     connector.setSecure(true); 
     connector.setPort(httpsPort); 
     protocol.setSSLEnabled(true); 
     protocol.setKeystoreType(keyStoreType); 
     protocol.setKeystoreFile(absKeyStorePath); 
     protocol.setKeystorePass(keyStorePass); 
     protocol.setTruststoreType(trustStoreType); 
     protocol.setTruststoreFile(absTrustStorePath); 
     protocol.setTruststorePass(trustStorePass); 
     protocol.setKeyAlias(keyAlias); 
     return connector; 
    } 

    private String getAbsolutePath(String path) { 
     File file = new File(path); 
     if (!file.isAbsolute()) { 
      path = file.getAbsolutePath(); 
     } 
     return path; 
    } 
} 

Konfiguration:

#SERVER CONFIG 
server.port=8090  

#Certificate 
cert.keyStore=src/main/resources/keystore.p12 
cert.trustStore=src/main/resources/keystore.p12 
cert.keyStorePass=... 
cert.trustStorePass=... 
cert.keyStoreType=pkcs12 
cert.trustStoreType=pkcs12 
cert.keyAlias=... 
cert.httpsPort=8443 
+0

Ich folge dem gleichen Tutorial https://drissamri.be/blog/java/enable-https-in-spring-boot/, aber ich kann es nicht zum Laufen bringen. Was mussten Sie ändern, damit dies funktioniert? – juventus

+0

@juventus Ich habe Antwort aktualisiert. Im Lernprogramm ist HTTPS standardmäßig und HTTP programmgesteuert, in der Dokumentation in umgekehrter Reihenfolge. Ich verließ Konfiguration als Standard (server.port = 8090), fügte hinzu: „cert“ Werte und ich habe HTTPS-Connector implementiert. Siehe aktualisierte Antwort. Jetzt kann ich Service entweder mit http 8090 oder https 8443 anrufen. – Wlad

-1

hatte ich die gleicher Fehler 405 für POST-Anfragen. Ich habe einen Weg gefunden, es zu reparieren.

So aktivieren Sie HTTPS und HTTP mit GET und POST ich folgendes zu einer @Configuration Klasse anstelle des TomcatEmbeddedServletContainerFactory in der Post, wie hinzuzufügen hatte:

@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer() { 
    return container -> { 
     if (container instanceof TomcatEmbeddedServletContainerFactory) { 
      TomcatEmbeddedServletContainerFactory containerFactory = (TomcatEmbeddedServletContainerFactory) container; 
      Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL); 
      connector.setPort(httpPort); 
      containerFactory.addAdditionalTomcatConnectors(connector); 
     } 
    }; 
} 

hoffe, das hilft für Menschen, die haben Das gleiche Problem in der Zukunft.