You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Integration TCP配置SSL遇类解析及文件缺失错误求助

Spring Integration TCP客户端SSL配置问题排查

已基于Spring Integration搭建TCP客户端-服务端消息系统,启用SSL配置时出现异常。初始错误为无法解析基类org.springframework.integration.ip.tcp.connection.support.TcpSSLContextSupport,确认sslContextSupport与DefaultTcpSSLContextSupport无冲突后,运行代码触发Bean创建异常,根源是类路径资源client.ks不存在。

配置代码

<bean id="sslContextSupport"
      class="org.springframework.integration.ip.tcp.connection.DefaultTcpSSLContextSupport">
    <constructor-arg value="client.ks"/>
    <constructor-arg value="client.truststore.ks"/>
    <constructor-arg value="secret"/>
    <constructor-arg value="secret"/>
</bean>

<int-ip:tcp-connection-factory id="clientConnectionFactory"
                           type="client"
                           host="localhost"
                           port="1234"
                           ssl-context-support="sslContextSupport" />

错误日志

初始编译错误

Cannot resolve required base class 'org.springframework.integration.ip.tcp.connection.support.TcpSSLContextSupport' 

运行时Bean创建异常日志

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientConnectionFactory': Invalid TcpSSLContextSupport - it failed to provide an SSLContext
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:967) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:941) ~[spring-context-6.0.9.jar:6.0.9]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) ~[spring-context-6.0.9.jar:6.0.9]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:311) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1305) ~[spring-boot-3.1.0.jar:3.1.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1294) ~[spring-boot-3.1.0.jar:3.1.0]
    at com.last.webApp.webApp.WebAppApplication.main(WebAppApplication.java:21) ~[classes/:na]
Caused by: java.lang.IllegalArgumentException: Invalid TcpSSLContextSupport - it failed to provide an SSLContext
    at org.springframework.integration.ip.tcp.connection.DefaultTcpNetSSLSocketFactorySupport.<init>(DefaultTcpNetSSLSocketFactorySupport.java:46) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    at org.springframework.integration.ip.config.TcpConnectionFactoryFactoryBean.obtainSocketFactorySupport(TcpConnectionFactoryFactoryBean.java:251) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    at org.springframework.integration.ip.config.TcpConnectionFactoryFactoryBean.createInstance(TcpConnectionFactoryFactoryBean.java:196) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    at org.springframework.integration.ip.config.TcpConnectionFactoryFactoryBean.createInstance(TcpConnectionFactoryFactoryBean.java:62) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816) ~[spring-beans-6.0.9.jar:6.0.9]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ~[spring-beans-6.0.9.jar:6.0.9]
    ... 16 common frames omitted
Caused by: java.io.FileNotFoundException: class path resource [client.ks] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:211) ~[spring-core-6.0.9.jar:6.0.9]
    at org.springframework.integration.ip.tcp.connection.DefaultTcpSSLContextSupport.getSSLContext(DefaultTcpSSLContextSupport.java:107) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    at org.springframework.integration.ip.tcp.connection.DefaultTcpNetSSLSocketFactorySupport.<init>(DefaultTcpNetSSLSocketFactorySupport.java:43) ~[spring-integration-ip-6.1.0.jar:6.1.0]
    ... 22 common frames omitted


Process finished with exit code 1

依赖版本配置

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent> 


<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-ip</artifactId>
            <version>6.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-http</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>


        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-binding</artifactId>
            <version>2.4.4.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

问题分析与解决步骤

  1. 初始基类解析错误:Spring Boot 3.1.0默认适配Spring Integration 6.1.x,手动指定的spring-integration-ip版本6.1.0是匹配的。可尝试刷新Maven/Gradle依赖、清理IDE缓存,确保依赖同步正常。
  2. 证书文件缺失问题:
    • 将client.ks和client.truststore.ks放置在项目src/main/resources目录下,确保编译后进入类路径。
    • 若证书存放在子目录,需指定完整路径,例如classpath:cert/client.ks(对应src/main/resources/cert目录)。
    • 检查文件名拼写,注意大小写是否匹配。
  3. SSL上下文验证:确认构造参数中的密码secret与证书实际设置一致,密码错误也会导致SSLContext创建失败。

内容的提问来源于stack exchange,提问作者sajjad Movahedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:27:02