Java 使用Spring集成使ssl上下文支持有条件的tcp连接工厂

Java 使用Spring集成使ssl上下文支持有条件的tcp连接工厂,java,spring,ssl,tcp,spring-integration,Java,Spring,Ssl,Tcp,Spring Integration,我正在使用spring-integration-ip-3.0.8.RELEASE jar进行TCP连接。 我的要求是有条件地启用SSL支持。 我使用下面的代码分别使用SSL和不使用SSL进行连接 使用SSL 无SSL 我需要在同一个文件中使用它们,并基于一些外部标志,需要决定连接是否应该支持SSL,因为有些客户希望使用SSL,有些客户希望不使用SSL 两者都是独立的工作文件。 我需要建议如何使其可配置(基于标志)。 TcpConnectionFactoryFactoryBean类有一个方

我正在使用spring-integration-ip-3.0.8.RELEASE jar进行TCP连接。 我的要求是有条件地启用SSL支持。 我使用下面的代码分别使用SSL和不使用SSL进行连接

使用SSL


无SSL


我需要在同一个文件中使用它们,并基于一些外部标志,需要决定连接是否应该支持SSL,因为有些客户希望使用SSL,有些客户希望不使用SSL

两者都是独立的工作文件。 我需要建议如何使其可配置(基于标志)。 TcpConnectionFactoryFactoryBean类有一个方法setSslContextSupport(TcpSSLContextSupport sslContextSupport),但是如何在xml中有条件地调用它。

您可以在应用程序启动期间使用它来激活一个或另一个

Bean定义概要文件是核心容器中的一种机制,允许在不同环境中注册不同的Bean。单词environment对不同的用户意味着不同的东西,这个特性可以帮助处理许多用例,包括:

编辑

如果您只想将连接工厂转换为Java配置,只需将这种类型的
添加到xml中即可。如果您想将所有内容转换为Java配置,请参阅Spring集成参考手册

@配置
公共类配置{
@豆子
公共TCP连接FactoryFactoryBean服务器FactoryWith或With SL(
@值(“${server.host}”)字符串主机,
@值(“${server.port}”)int port,
@值(“${use.ssl}”)布尔useSSL,
ByteArraylengHeaderSerializer序列化程序,
TcpSSLContextSupport sslContextSupport){
TcpConnectionFactoryFactoryBean fb=新的TcpConnectionFactoryFactoryBean(“服务器”);
fb.setHost(主机);
fb.设置端口(端口);
fb.设置序列化器(序列化器);
设置反序列化器(序列化器);
如果(使用SSL){
fb.setSslContextSupport(sslContextSupport);
}
返回fb;
}
@豆子
public ByteArrayLengthHeaderSerializer序列化程序(){
返回新的ByteArraylengHeaderSerializer();
}
@豆子
公共TcpSSLContextSupport sslContextSupport(){
返回新的DefaultTcpSSLContextSupport(“文件:keyStore.ks”、“secret”、“文件:信任库”、“secret”);
}
}

3.0.8?真正地那是四年前的事了。在我们提供建议之前,您需要显示使用这些工厂的配置。添加了tcp连接的配置代码。是否有任何属性/属性可以用来在进行tcp连接时禁用或启用SSL,如require SSL=trues,但spring是否提供了一个内置选项来启用/禁用SSL连接?在使用Java配置时,不使用XML配置(
@Bean
)您可以有条件地设置ssl上下文支持。使用XML配置,您必须添加2个bean并将它们放在不同的配置文件中。Gary,您可以与Java配置共享任何链接以供快速参考;但是你真的应该尝试升级到一个更新的版本;目前的版本是5.2.1。
    <beans:bean id="serverCustomSerializer"
    class="com.telnet.core.serializer.CustomSerializer">
    <beans:property name="terminatingChar"
        value="${server.terminator}" />
    <beans:property name="maxLength"
        value="${server.msgLength}" />
</beans:bean>

<beans:bean id="serverFactoryTaskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <beans:property name="corePoolSize" value="5" />
    <beans:property name="queueCapacity" value="0" />
</beans:bean>

<int:channel id="telnetLandingChannel" />

<ip:tcp-connection-factory id="serverFactoryWithSSL"
type="server" host="${server.host}" port="${server.port}"
single-use="false" serializer="${server.serializer}"
deserializer="${server.serializer}"
task-executor="serverFactoryTaskExecutor"
ssl-context-support="sslContextSupport" />

<ip:tcp-inbound-channel-adapter
    id="serverInboundAdpaterAck" channel="telnetLandingChannel"
    connection-factory="${server.factory}" error-channel="errorChannel"
    auto-startup="false" />

<ip:tcp-outbound-channel-adapter
    id="serverOutboundAdapter" channel="serverReplyChannel"
    connection-factory="serverFactory" auto-startup="true" />
<beans:bean id="serverCustomSerializer"
    class="com.telnet.core.serializer.CustomSerializer">
    <beans:property name="terminatingChar"
        value="${server.terminator}" />
    <beans:property name="maxLength"
        value="${server.msgLength}" />
</beans:bean>

<beans:bean id="serverFactoryTaskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <beans:property name="corePoolSize" value="5" />
    <beans:property name="queueCapacity" value="0" />
</beans:bean>

<int:channel id="telnetLandingChannel" />

<ip:tcp-connection-factory id="serverFactory"
    type="server" host="${server.host}" port="${server.port}"
    single-use="false" serializer="${server.serializer}"
    deserializer="${server.serializer}"
    task-executor="serverFactoryTaskExecutor" />

<ip:tcp-inbound-channel-adapter
    id="serverInboundAdpaterAck" channel="telnetLandingChannel"
    connection-factory="${server.factory}" error-channel="errorChannel"
    auto-startup="false" />

<ip:tcp-outbound-channel-adapter
    id="serverOutboundAdapter" channel="serverReplyChannel"
    connection-factory="serverFactory" auto-startup="true" />