是否可以在 Micronaut 中添加自定义的“ChannelInboundHandler”?

Is it possible to add a custom `ChannelInboundHandler` in Micronaut?

我想在我的 Micronaut 服务中添加自定义 ChannelInboundHandler,这样我就可以监听在尝试 TLS 握手后生成的 SslHandshakeCompletionEvent

我似乎可以通过用 @Singleton 注释来简单地添加 ChannelOutboundHandler,但是当我尝试用 ChannelInboundHandler 做同样的事情时,它似乎并没有将添加到管道中。

正确的做法是什么?

编辑

这看起来很有希望:https://docs.micronaut.io/snapshot/guide/index.html#nettyPipeline

您可以创建 BeanCreatedEventListener<ChannelPipelineCustomizer> 的实现,并提供 onCreated 方法的实现,例如

    @Override
    public ChannelPipelineCustomizer onCreated(BeanCreatedEvent<ChannelPipelineCustomizer> event) {
        ChannelPipelineCustomizer customizer = event.getBean();

        if (!customizer.isServerChannel()) {
            customizer.doOnConnect(pipeline -> {
                pipeline.addAfter(
                    ChannelPipelineCustomizer.HANDLER_HTTP_CLIENT_CODEC,
                    "my-handler",
                    new MyChannelInboundHandler()
                );
                return pipeline;
            });
        }

        return customizer;
    }

然后,在您的 MyChannelInboundHandler class 中,实现 userEventTriggered 方法并监听 SslHandshakeCompletionEvent.SUCCESS 事件。然后你可以做出一些断言,例如链中某些证书的 public 密钥,如果您正在执行 HPKP.