是否可以在 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
.
我想在我的 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
.