2016-05-12 97 views
7

如何使用Spring WS配置我的Spring MvC 4应用程序与第三方(如银行)建立双向SSL连接。我需要交换证书并验证服务器证书,然后交换Soap消息。如果任何链接或代码或程序请您更新如何在Spring W中将SOAP请求消息发送到接受Soap请求消息的服务器?

+1

你想制作一个Web服务或消费呢?我有点困惑... 这听起来像你想要消耗一个虽然。 那么你应该看看这个: https://spring.io/guides/gs/consuming-web-service/ – NWessel

+0

澄清,你需要SSL连接?对于您想要使用的Web服务? –

+0

我建议你花一些时间来阅读Spring WS参考指南......除了SSL配置之外,本指南会告诉你所有你需要的东西。 –

回答

2

与密钥库和trustore必要的属性开始你的虚拟机所描述的here in the JSSE doc

-Djavax.net.ssl.keyStoreType=yourKeystoreType(jks,pkcs12,etc.) 
-Djavax.net.ssl.trustStoreType=yourTruststoreType(jks,pkcs12,etc.) 
-Djavax.net.ssl.keyStore=/path/to/your/keystore 
-Djavax.net.ssl.trustStore=/path/to/your/truststore 
-Djavax.net.debug=ssl 
-Djavax.net.ssl.keyStorePassword=... 
-Djavax.net.ssl.trustStorePassword=... 

然后在你的客户端代码,你需要获得SSLSocketFactory的

SSLSocketFactory sslsocketfactory =(SSLSocketFactory) SSLSocketFactory.getDefault(); 

并将其连接到WebServiceTemplate(摘录从ClientCustomSSL from apache examples拍摄创作的HttpClient):

WebServiceMessageSender sender = new HttpComponentsMessageSender(HttpClients.custom().setSSLSocketFactory(sslsocketfactory)); 
getWebServiceTemplate().setMessageSender(sender); 
+0

如何在设置MessageSender之后使用marshall和receive方法 – briantaurostack7

3

Spring-WS是可能的。你必须使用Spring WS提供的WebServiceTemplate API。以下是使用它的方法。

import java.io.StringReader; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

import org.springframework.ws.WebServiceMessageFactory; 
import org.springframework.ws.client.core.WebServiceTemplate; 
import org.springframework.ws.transport.WebServiceMessageSender; 

public class WebServiceClient { 

    private static final String MESSAGE = 
     "<message xmlns=\"http://tempuri.org\">Hello Web Service World</message>"; 

    private final WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); 

    public void setDefaultUri(String defaultUri) { 
     webServiceTemplate.setDefaultUri(defaultUri); 
    } 

    // send to the configured default URI 
    public void simpleSendAndReceive() { 
     StreamSource source = new StreamSource(new StringReader(MESSAGE)); 
     StreamResult result = new StreamResult(System.out); 
     webServiceTemplate.sendSourceAndReceiveToResult(source, result); 
    } 

    // send to an explicit URI 
    public void customSendAndReceive() { 
     StreamSource source = new StreamSource(new StringReader(MESSAGE)); 
     StreamResult result = new StreamResult(System.out); 
     webServiceTemplate.sendSourceAndReceiveToResult("http://localhost:8080/AnotherWebService", 
      source, result); 
    } 

} 

请参阅本link

而另一个有用link2