2009-07-09 4 views
1

Ich muss mehr Informationen extrahieren als nur das CN des Zertifikats. Derzeit erhalte ich nur die Standard-UserDetails loadUserByUsername (String arg), wobei arg das CN des Zertifikats ist. Ich brauche das X509Certificate-Objekt. Ist es möglich?Wie bekomme ich das Zertifikat in den X509 Filter (Spring Security)?

auf Frühling Sicherheit xml-Datei:

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

Antwort

2

Nein, du kannst es nicht so kommen. Sie müssen es von der HttpServletRequest greifen:

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

Wenn Sie 'cert [0] .toString()' ausdrucken, sollte das Cert mit etwas wie '---- BEGIN CERTIFICATE ---- ....' beginnen und mit '---- enden ENDE ZERTIFIKAT ----- '? –

0

Es ist auch erwähnenswert, dass, sobald Sie durch die autorisiert sind, in gebaut X509AuthenticationFilter von Spring Security wie es Ihr Zertifikat akzeptiert hat, dann können Sie die X509Certificate als

zugreifen
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()); 
    ... 
Verwandte Themen