2009-07-09 12 views
1

私は、証明書のCNよりも多くの情報を抽出する必要があります。現在のところ、標準のUserDetails loadUserByUsername(String arg)のみを取得します。ここで、argは証明書のCNです。私はX509Certificateオブジェクトを取得する必要があります。出来ますか?春のセキュリティxmlファイルに証明書をX509フィルターに取り込む方法(Spring Security)

<x509 subject-principal-regex="CN=(.*?)," user-service-ref="myUserDetailsService" /> 

答えて

2

ありません、あなたがそのように取得することはできません。あなたはHttpServletRequestのからそれをつかむ必要があります。

X509Certificate[] certs = (X509Certificate[])HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate"); 
+0

'---- BEGIN CERTIFICATE ---- ....'のようなもので始まり、 '---- 'で終わる場合は' cert [0] .toString() 'を出力すると、 END CERTIFICATE ----- '? –

0

それはあなたの証明書を受け入れたとして、あなたはSpring Securityの内蔵X509AuthenticationFilterによって許可されると、その後は

として X509Certificateにアクセスできることも注目に値します
Object object = SecurityContextHolder.getContext().getAuthentication().getCredentials(); 
if (object instanceof X509Certificate) 
{ 
    X509Certificate x509Certificate = (X509Certificate) object; 
    //convert to bouncycastle if you want 
    X509CertificateHolder x509CertificateHolder = 
     new X509CertificateHolder(x509Certificate.getEncoded()); 
    ... 
関連する問題