2011-01-18 13 views
4

Javaデスクトップアプリケーションを開発しており、その中にWebサービスを使用したいと考えています。 Webサービスは、binarysecuritytokenを使用してメッセージレベルのセキュリティを備えた双方向SSL接続が必要です。 NetBeans IDE 6.9.1をJDK 1.6.0.23およびJAX-WSをwsラッパーとして使用しています。どのように私はクライアントマシン上の任意のWebサーバーを使用せずにwsと通信することができます。私が読んでいるもののほとんどは、クライアントマシン上でTomcatやその他のWebサーバーを持っている必要があります(Tomcatなどのキーストアを設定しています...)。それは可能ですか? JavaデスクトップアプリケーションのSSLベースのwsクライアントについては、いくつかの記事をお勧めします。使用するJavaSEでのWebサービスの利用JavaアプリケーションとSSLを使用したWebサービスクライアント

+1

簡単な言葉で、私はどのようにBindingProvidorを使用してのSOAPHeaderに署名する任意のJ2EEコンテナ –

答えて

3

- あなたがサービスを呼び出す前に、プロパティを設定するNetBeans tutorial

使用BindingProviderを参照してください。使用例を参照BindingProviderhere

+0

を使用せずに、SSLで保護されたWebサービスを消費するためのJ2SEソリューションを必要とします?私はJAX-WSによって生成されたリクエスト/ポートに署名付きのSOAPHeaderを追加したいと思います。 jaxws-rtにはWSBindingProviderなどのBindingProvidorの拡張機能がありますが、J2EEコンテナも使用しています。 –

+0

WebサービスがWSDLを公開すると、セキュリティ記述子が存在します。その後、wsimportを使用してWSDL文書からクライアント側の成果物を生成し、適切に構成します。 Netbeansを使用した簡単なチュートリアル(ここでは少し古いですが、そこにすべての概念があります)(http://netbeans.org/kb/docs/websvc/wsit.html)があります。 –

+0

私が上記のメッセージレベルのセキュリティです。 SSLでポイントツーポイントを保護するだけの場合は、http://www.java-tips.org/java-ee-tips/java-api-for-xml-web-services/using-jaxを参照してください。 -ws-based-web-services-wit.html –

4

ここでは、WS over SSL http://ws.apache.org/xmlrpc/ssl.htmlを扱う2つの方法があります。
正しい方法は、SEソリューションとEEソリューションの両方にキーストアを設定して使用することです。
次の迅速な解決策は、私の作品:

package client; 

import java.security.cert.X509Certificate; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSession; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.X509TrustManager; 
import javax.xml.namespace.QName; 

import ws.MyService1; 
import ws.MyService1ServiceLocator; 

public class Client { 

    public static void main(String[] args) throws Exception { 
     test(); 
    } 

    public static void test() throws Exception { 
     // Create a trust manager that does not validate certificate chains 
     TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       return null; 
      } 

      public void checkClientTrusted(X509Certificate[] certs, String authType) { 
       // Trust always 
      } 

      public void checkServerTrusted(X509Certificate[] certs, String authType) { 
       // Trust always 
      } 
     } }; 
     // Install the all-trusting trust manager 
     SSLContext sc = SSLContext.getInstance("SSL"); 
     // Create empty HostnameVerifier 
     HostnameVerifier hv = new HostnameVerifier() { 
      public boolean verify(String arg0, SSLSession arg1) { 
       return true; 
      } 
     }; 

     sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
     HttpsURLConnection.setDefaultHostnameVerifier(hv); 

     // use secured service 
     QName qname = new QName("http://ws", "MyService1Service"); 
     String url = "https://127.0.0.1:7002/MyService/wsdl/MyService1.wsdl"; 
     MyService1 service = new MyService1ServiceLocator(url, qname).getMyService1(); 
     System.out.println(service.getMessage()); 
    } 
} 
+2

この解決策は、提供されたソリューションからすぐにわからないws.Myservice1とws.MyService1ServiceLocatorの実装に関するいくつかの詳細を提供することで改善できます。 –

+0

非常に有用なおかげで –

関連する問題