Apache CXF - 2向SSL服务器端 - 不使用Spring
创始人
2024-09-03 22:03:00
0

以下是一个使用Apache CXF创建2向SSL连接的示例代码,不使用Spring框架:

import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;

public class SSLClientExample {
    private static final String SERVICE_URL = "https://localhost:8443/your-service-url";
    private static final String KEYSTORE_PATH = "/path/to/client_keystore.jks";
    private static final String KEYSTORE_PASSWORD = "your_keystore_password";
    private static final String TRUSTSTORE_PATH = "/path/to/client_truststore.jks";
    private static final String TRUSTSTORE_PASSWORD = "your_truststore_password";

    public static void main(String[] args) {
        // Create the client proxy factory
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(YourServiceInterface.class);
        factory.setAddress(SERVICE_URL);

        // Create the client proxy
        YourServiceInterface client = (YourServiceInterface) factory.create();

        // Configure SSL/TLS parameters
        configureTLS(client);

        // Enable logging for request and response
        enableLogging(client);

        // Call the service methods
        // ...

        System.exit(0);
    }

    private static void configureTLS(YourServiceInterface client) {
        try {
            // Load the client keystore
            KeyStore keyStore = KeyStore.getInstance("JKS");
            try (InputStream keystoreInputStream = new FileInputStream(KEYSTORE_PATH)) {
                keyStore.load(keystoreInputStream, KEYSTORE_PASSWORD.toCharArray());
            }

            // Load the client truststore
            KeyStore trustStore = KeyStore.getInstance("JKS");
            try (InputStream truststoreInputStream = new FileInputStream(TRUSTSTORE_PATH)) {
                trustStore.load(truststoreInputStream, TRUSTSTORE_PASSWORD.toCharArray());
            }

            // Create KeyManagerFactory and TrustManagerFactory
            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            keyManagerFactory.init(keyStore, KEYSTORE_PASSWORD.toCharArray());

            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(trustStore);

            // Create TLSClientParameters
            TLSClientParameters tlsParams = new TLSClientParameters();
            tlsParams.setKeyManagers(keyManagerFactory.getKeyManagers());
            tlsParams.setTrustManagers(trustManagerFactory.getTrustManagers());
            tlsParams.setDisableCNCheck(true); // Disable CN (Common Name) check

            // Configure HTTPConduit with TLSClientParameters
            Client clientProxy = ClientProxy.getClient(client);
            HTTPConduit httpConduit = (HTTPConduit) clientProxy.getConduit();
            httpConduit.setTlsClientParameters(tlsParams);

            // Configure HTTPClientPolicy
            HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
            httpClientPolicy.setConnectionTimeout(36000);
            httpClientPolicy.setReceiveTimeout(32000);
            httpConduit.setClient(httpClientPolicy);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void enableLogging(YourServiceInterface client) {
        Client clientProxy = ClientProxy.getClient(client);
        clientProxy.getInInterceptors().add(new LoggingInInterceptor());
        clientProxy.getOutInterceptors().add(new LoggingOutInterceptor());
    }
}

在上面的代码中,您需要将以下值替换为实际值:

  1. SERVICE_URL - 要访问的SSL服务器的URL。
  2. KEYSTORE_PATH - 用于客户端的keystore文件的路径。
  3. KEYSTORE_PASSWORD - 客户端的keystore密码。
  4. TRUSTSTORE_PATH - 用于客户端的truststore文件的路径。
  5. TRUSTSTORE_PASSWORD - 客户端的truststore密码。

您还需要创建一个接口 YourServiceInterface,其中定义了要调用的服务方法的签名。然后,您可以使用 YourServiceInterface 接口创建一个代理客户端,通过该客户端可以调

相关内容

热门资讯

安卓系统怎么连不上carlif... 安卓系统无法连接CarLife的原因及解决方法随着智能手机的普及,CarLife这一车载互联功能为驾...
iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
oppo手机安卓系统换成苹果系... OPPO手机安卓系统换成苹果系统:现实吗?如何操作?随着智能手机市场的不断发展,用户对于手机系统的需...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...
安卓平板改windows 系统... 你有没有想过,你的安卓平板电脑是不是也能变身成Windows系统的超级英雄呢?想象在同一个设备上,你...
安卓系统上滑按键,便捷生活与高... 你有没有发现,现在手机屏幕越来越大,操作起来却越来越方便了呢?这都得归功于安卓系统上的那些神奇的上滑...
安卓系统连接耳机模式,蓝牙、有... 亲爱的手机控们,你们有没有遇到过这种情况:手机突然变成了“耳机模式”,明明耳机没插,声音却只从耳机孔...
希沃系统怎么装安卓系统,解锁更... 亲爱的读者们,你是否也像我一样,对希沃一体机上的安卓系统充满了好奇呢?想象在教室里,你的希沃一体机不...
安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...
安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...