2017-02-08 6 views
0

こんにちは、私は両方のHTTPを持っているしようとしています& httpsプロトコルは、春のブートWebサービスで利用可能です。私はこのチュートリアルに従っていた:https://drissamri.be/blog/java/enable-https-in-spring-boot/リダイレクトポストメソッドHTTP - > HTTPS - HTTPステータス405(スプリングブート)

HTTPSポストメソッドは動作しますが、httpは動作しません。私はSoapUIでテストし、HTTP status 405 - Method not allowedを投げます。

これは、要求/応答方法は、コードにどのように見えるかです:

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

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

私は添付しなければならない任意のコードスニペット?

ありがとうございました。

答えて

-3

複数のチュートリアルでいじった後、答えは公式ガイドに従うことです...

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; 
    } 
} 

設定:

#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

私は同じチュートリアルhttps://drissamri.be/blog/java/enable-https-in-spring-boot/に従っていますが、動作させることができません。この仕事をするために何を変えなければならなかったのですか? – juventus

+0

@juventus私は答えを更新しました。このチュートリアルでは、HTTPSはデフォルトであり、HTTPはプログラムによって行われています。私はデフォルト(server.port = 8090)として設定を残し、 "cert"値を追加し、HTTPS Connectorを実装しました。更新された回答をご覧ください。今私はhttp 8090またはhttps 8443でサービスを呼び出すことができます。 – Wlad

-1

私が持っていましたPOST要求に対して同じエラー405が発生しました。私はそれを修正する方法を見つけた。私はポストに記載され代わりにTomcatEmbeddedServletContainerFactoryの@Configurationクラスに以下を追加する必要がありましたGETやPOSTでhttpsとhttpの両方を有効にするには

@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); 
     } 
    }; 
} 

希望の人が持つことになりますため、このことができます将来同じ問題になる。

関連する問題