gpt4 book ai didi

java - 如何在 Spring Boot 中从 Java 设置 TCPConnectionFactory 或 SSLServerSocketFactory

转载 作者:可可西里 更新时间:2023-11-01 02:33:44 26 4
gpt4 key购买 nike

我是 Spring Boot 的新手,但我的工作要求我使用 Spring Boot 实现一个小型 Web 服务。

Web 服务需要接受 SSL TCP 连接(外部系统将使用自定义协议(protocol)(而非 HTTP)连接到我的 Web 服务)。另外,我想在后台任务(或多个后台任务)中处理这些连接。

看了官方文档(http://docs.spring.io/spring-integration/reference/html/ip.html)后,我还是不明白(我把所有的 XML 放在哪里)。当我在 SO 上询问该 XML 的放置位置时,我得到的回答是这是一种非常古老的配置方法,不应再使用。

执行此操作的“最新”方法是什么?

最佳答案

@SpringBootApplication
public class So43983296Application implements CommandLineRunner {

public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(So43983296Application.class, args);
Thread.sleep(10_000);
context.close();
}

@Autowired
private DefaultTcpNetSSLSocketFactorySupport ssl;

@Override
public void run(String... args) throws Exception {
Socket socket = ssl.getSocketFactory().createSocket("localhost", 1234);
socket.getOutputStream().write("foo\r\n".getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String result = br.readLine();
System.out.println(result);
br.close();
socket.close();
}

@Bean
public TcpNetServerConnectionFactory scf() {
TcpNetServerConnectionFactory scf = new TcpNetServerConnectionFactory(1234);
DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport = tcpSocketFactorySupport();
scf.setTcpSocketFactorySupport(tcpSocketFactorySupport);
// Add custom serializer/deserializer here; default is ByteArrayCrLfSerializer
return scf;
}

@Bean
public DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport() {
TcpSSLContextSupport sslContextSupport = new DefaultTcpSSLContextSupport("classpath:test.ks",
"classpath:test.truststore.ks", "secret", "secret");
DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport =
new DefaultTcpNetSSLSocketFactorySupport(sslContextSupport);
return tcpSocketFactorySupport;
}

@Bean
public TcpInboundGateway inGate() {
TcpInboundGateway inGate = new TcpInboundGateway();
inGate.setConnectionFactory(scf());
inGate.setRequestChannelName("upperCase");
return inGate;
}

@ServiceActivator(inputChannel = "upperCase")
public String upCase(byte[] in) {
return new String(in).toUpperCase();
}

}

如果您更喜欢 Spring Integration 的 XML 配置,请将其添加到 spring 配置 xml 文件并在类上使用 @ImportResource("my-context.xml")

关于java - 如何在 Spring Boot 中从 Java 设置 TCPConnectionFactory 或 SSLServerSocketFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com