Клиент веб-службы с приложением Java и SSL - PullRequest
4 голосов
/ 18 января 2011

Я занимаюсь разработкой настольного Java-приложения и хочу использовать в нем веб-сервис. Веб-сервис требует двустороннего SSL-соединения с безопасностью на уровне сообщений, используя binarysecuritytoken. Я использую среду IDE NetBeans 6.9.1 с JDK 1.6.0.23 и JAX-WS в качестве оболочки ws. Как я могу общаться с ws без использования любого веб-сервера на клиентском компьютере. Большинство вещей, которые я читаю, должны иметь tomcat или какой-либо другой веб-сервер на клиентской машине (настройка хранилища ключей в tomcat или около того ...). Возможно ли это сделать? Пожалуйста, предложите статью для WS-клиента на основе SSL для настольного Java-приложения.

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Вот два способа справиться с WS по SSL http://ws.apache.org/xmlrpc/ssl.html.
Правильный способ - настроить и использовать хранилище ключей для решений 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());
    }
}
3 голосов
/ 19 января 2011

Использование веб-сервисов в JavaSE - см. Учебное пособие по NetBeans

. Используйте BindingProvider для настройки свойств перед вызовом сервиса.Смотрите пример использования BindingProvider здесь

...