Как добавить аутентифицированную информацию о пользователе (принципале) в ChannelHandlerContext (или где-либо еще?) - PullRequest
0 голосов
/ 21 марта 2012

Короче говоря, я делаю двусторонний SSL, а сертификат клиента используется для идентификации моего конечного пользователя.SSLHandler отлично справляется с этой задачей, и SSLHandler знает все об этом принципе.Как я могу поделиться этой информацией с другими обработчиками, чтобы они могли выполнять свою работу по всему конвейеру канала?

Здесь мое расширение SSLHandler находит принципала пользователя ...

...

класс MySslHandler расширяет SSLHandler {....

public void messageReceived(
        ChannelHandlerContext ctx, MessageEvent e) throws Exception{
    logger.info("messageReceived");
    super.messageReceived(ctx, e);
        try{
                System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + getPrincipalCertificate().getSubjectDN().toString());
                        }
                        catch(Throwable t){
                            logger.error("Unable to see principal ", t);
                        }        

}    
/**
 * 
 * @return Return the user certificate of the principal
 * @throws SSLPeerUnverifiedException  if the peer is not yet verified
 */
public X509Certificate getPrincipalCertificate() throws SSLPeerUnverifiedException{
    return getEngine().getSession().getPeerCertificateChain()[0];
}

}

Предположительно, мне следует добавить информацию в ChannelHandlerContext, чтобы она была доступна в течение сеанса SSL и для всех других моих обработчиков, но яне могу понять, как это сделать.Это неправильный подход?Есть предложения?

Спасибо!

1 Ответ

1 голос
/ 21 марта 2012

Если вам нужно поделиться им между ChannelHandlers, вам нужно использовать статический экземпляр ChannelLocal.Это необходимо, так как ChannelHandlerContext для каждого ChannelHandler.

См. http://netty.io/docs/stable/api/org/jboss/netty/channel/ChannelLocal.html

...