Как получить сертификат в фильтр X509 (Spring Security)? - PullRequest
1 голос
/ 09 июля 2009

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 июля 2009

Нет, так не получится. Вам нужно получить его из запроса HttpServletRequest:

X509Certificate[] certs = (X509Certificate[])HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate");
0 голосов
/ 10 ноября 2014

Стоит также отметить, что как только вы авторизуетесь встроенным 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());
    ...
...