Apache CXF - 2向SSL服务器端 - 不使用Spring
创始人
2024-09-03 22:03:18
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 接口创建一个代理客户端,通过该客户端可以调

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...