Я хотел бы добавить пользовательский 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.