要するに、双方向SSLを行い、クライアント証明書を使用してエンドユーザーを識別します。 SSLHandlerはそれをうまく処理し、SSLHandlerはそのプリンシパルについてすべて知っています。その情報を他のハンドラとどのように共有すれば、チャンネルパイプラインを通じて仕事をすることができますか?ここでChannelHandlerContext(またはその他の場所)に認証されたユーザー(プリンシパル)情報を追加する方法
私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セッションの期間中および他のすべてのハンドラに使用できるようにしますが、その方法を理解することはできません。これは間違ったアプローチですか?助言がありますか?
ありがとうございます!
を参照してください仕事をしたこと、ありがとうございます! – CStepnitz