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

