Я хотел бы добавить пользовательский ChannelInboundHandler
в свой сервис Micronaut, чтобы я мог прослушивать SslHandshakeCompletionEvent
, созданный после попытки рукопожатия TLS.
Кажется, я могу добавить ChannelOutboundHandler
достаточно просто, аннотировав его с помощью @Singleton
, однако, когда я пытаюсь сделать то же самое с 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
реализуйте метод userEventTriggered
и прослушайте событие SslHandshakeCompletionEvent.SUCCESS
. Затем вы можете сделать некоторые утверждения, например. открытый ключ некоторых сертификатов в цепочке, если вы делаете HPKP
.