Milo:获取客户端IP
Milo: get IP of client
有没有办法在写入上下文中获取客户端 IP?
我想获取写入我的 Milo-OPCUA-Server 的客户端的 IP,因此我可以根据客户端 IP 以不同方式处理这些写入(本地客户端应该能够直接在服务器上写入,而其他写入应该被转发到另一台服务器)
好的,目前这不是任何官方 API 的一部分,所以它几乎肯定会在未来崩溃,但是:
使用 OperationContext
实现 AttributeManager#write(WriteContext, List<WriteValue>)
:
context.getSession().ifPresent(session -> {
UaStackServer stackServer = context.getServer().getServer();
if (stackServer instanceof UaTcpStackServer) {
ServerSecureChannel secureChannel = ((UaTcpStackServer) stackServer)
.getSecureChannel(session.getSecureChannelId());
Channel channel = secureChannel.attr(UaTcpStackServer.BoundChannelKey).get();
SocketAddress remoteAddress = channel.remoteAddress();
}
});
我必须添加一些官方的 API 才能做到这一点,可能是 Session
对象之外的东西。
有没有办法在写入上下文中获取客户端 IP? 我想获取写入我的 Milo-OPCUA-Server 的客户端的 IP,因此我可以根据客户端 IP 以不同方式处理这些写入(本地客户端应该能够直接在服务器上写入,而其他写入应该被转发到另一台服务器)
好的,目前这不是任何官方 API 的一部分,所以它几乎肯定会在未来崩溃,但是:
使用 OperationContext
实现 AttributeManager#write(WriteContext, List<WriteValue>)
:
context.getSession().ifPresent(session -> {
UaStackServer stackServer = context.getServer().getServer();
if (stackServer instanceof UaTcpStackServer) {
ServerSecureChannel secureChannel = ((UaTcpStackServer) stackServer)
.getSecureChannel(session.getSecureChannelId());
Channel channel = secureChannel.attr(UaTcpStackServer.BoundChannelKey).get();
SocketAddress remoteAddress = channel.remoteAddress();
}
});
我必须添加一些官方的 API 才能做到这一点,可能是 Session
对象之外的东西。