2011-01-18 3 views
4

Je développe une application de bureau Java et je souhaite y utiliser un service Web. Le service Web requiert une connexion SSL bidirectionnelle avec une sécurité au niveau du message à l'aide de binarysecuritytoken. J'utilise NetBeans IDE 6.9.1 avec JDK 1.6.0.23 et JAX-WS comme ws wrapper. Comment puis-je communiquer avec les ws sans utiliser de serveur Web sur la machine cliente? La plupart des choses que je lis doivent avoir tomcat ou un autre serveur web sur la machine cliente (en configurant le keystore dans tomcat ou autre ...). Est-il possible de faire? Veuillez suggérer un article pour le client WS basé sur SSL pour l'application de bureau Java.Client de service Web avec application Java et SSL

+1

En mots simples, je besoin d'une solution de J2SE pour consommer un service Web sécurisé SSL sans utiliser conteneur J2EE –

Répondre

3

services web CONSOMMER JavaSE - voir NetBeans tutorial

Utilisez BindingProvider pour définir vos propriétés avant appeler le service. Voir l'exemple de l'utilisation BindingProviderhere

+0

Comment connecter le SOAPHeader en utilisant la BindingProvidor ?? Je veux ajouter un SOAPHeader signé à la demande/au port généré par JAX-WS. Il existe des extensions de BindingProvidor telles que WSBindingProvider dans jaxws-rt mais il utilise également le conteneur J2EE. –

+0

Lorsque le service Web publiera le WSDL, il y aura des descripteurs de sécurité. Vous utiliserez ensuite wsimport pour générer l'artefact côté client à partir du document WSDL, puis le configurerez de manière appropriée. Il y a un tutoriel simple (un peu daté mais les concepts sont tous là) ici (http://netbeans.org/kb/docs/websvc/wsit.html) en utilisant Netbeans. –

+0

Ce que je mentionne ci-dessus est la sécurité au niveau du message. Si vous voulez juste sécuriser point à point avec SSL, alors voyez ceci http://www.java-tips.org/java-ee-tips/java-api-for-xml-web-services/using-jax -ws-based-web-services-wit.html –

4

Voici deux façons de traiter avec WS sur SSL http://ws.apache.org/xmlrpc/ssl.html.
Le bon moyen est de configurer et d'utiliser votre keystore pour les solutions SE et EE.
solution rapide suivante fonctionne aussi pour moi:

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

Cette réponse pourrait être améliorée en fournissant quelques détails concernant ce que ws.Myservice1 et ws.MyService1ServiceLocator implémentent car il n'est pas immédiatement apparent à partir de la solution fournie. –

+0

très utile merci –

Questions connexes