2015-07-21 42 views
0

也許我可以在這裏找到一些幫助。 我需要訪問Web服務,但首先需要使用密鑰庫對我的客戶端進行身份驗證。我不能使用春天。 在彈簧ws.xml這樣的配置適用於同事的客戶:帶密鑰庫的Java Web服務客戶端

<bean class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean" id="clientCrypto"> 
    <property name="configuration"> 
     <util:properties> 
      <prop key="org.apache.ws.security.crypto.provider">org.apache.ws.security.components.crypto.Merlin</prop> 
      <prop key="org.apache.ws.security.crypto.merlin.keystore.type">jks</prop> 
      <prop key="org.apache.ws.security.crypto.merlin.keystore.password">${esb.keystore.password}</prop> 
      <prop key="org.apache.ws.security.crypto.merlin.keystore.alias">${esb.keystore.user}</prop> 
      <prop key="org.apache.ws.security.crypto.merlin.file">src\main\resources\${esb.keystore.location}</prop> 
     </util:properties> 
    </property> 
</bean> 

我的客戶是這樣的:

PortalCustomerService service = new PortalCustomerService(); 
PortalCustomerPortType port = service.getSomethingHttpPort(); 

BindingProvider bindingProvider = (BindingProvider) port; 
Binding binding = bindingProvider.getBinding(); 
List<Handler> handlerList = binding.getHandlerChain(); 
handlerList.add(new MyHandler()); 
binding.setHandlerChain(handlerList); 

//calling webmethod 
MyResponse response = port.checkClients(getRequest()); 

MyHandler的和有方法的handleMessage這樣的:

public boolean handleMessage(SOAPMessageContext messageContext) { 
    Boolean outboundProperty = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

    if (outboundProperty.booleanValue()) { 
     // I think I need to add something here but I dont know what 
    } else {} 

    return true; 
} 

我有私鑰:myportal.key,公鑰:portal.cer。
沒有驗證我:

javax.xml.ws.soap.SOAPFaultException: An error was discovered processing the <wsse:Security> header 
+0

這是一個非常糟糕的問題,對不起:( – Geek

+0

我該如何改進?:) – marram

+0

System.setProperty(「javax.net.ssl.keyStore」,keystore); System.setProperty(「javax.net.ssl.keyStorePassword」,password); 不會幫助:( – marram

回答

0

您可以通過以下

System.setProperty("javax.net.debug","all"); 

得到一些幫助,如果該鍵是自簽名的,所以你可能需要太設置TrustStore屬性。