2009-07-09 3 views
1

Мне нужно извлечь больше информации, чем только CN сертификата. В настоящее время я получаю стандартное UserDetails loadUserByUsername (String arg), где arg - CN сертификата. Мне нужно получить объект X509Certificate. Является ли это возможным?Как получить сертификат в фильтр X509 (Spring Security)?

на весеннем файле XML безопасности:

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

ответ

2

Нет, вы не можете получить его таким образом. Вы должны захватить его из HTTPServletRequest:

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

Если вы печатаете 'cert [0] .toString()', должен ли сертификат начинать с чего-то типа '---- BEGIN CERTIFICATE ---- ....' и заканчивать' ---- КОНЕЦ СЕРТИФИКАТА ----- '? –

0

Стоит также отметить, что, как только вы санкционированы встроенный X509AuthenticationFilter из Spring Security, как он принял сертификат, то вы можете получить доступ к 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()); 
    ... 
Смежные вопросы