4

我在我的 web 应用程序中使用 Spring Security (v3.1.3) 进行 X.509 身份验证。用户和角色存储在数据库中,但我实际上不需要这样做,因为客户端证书的 CN 符合“[ROLE] - [USERNAME]”模式,这意味着我已经拥有证书本身的用户名和角色. 那么如何在不费力的情况下消除数据库呢?我应该编写自己的用户服务实现,它将填充 UserDetails,还是有更优雅的方法?

4

1 回答 1

5

是的,最简单的选择可能是编写一个自定义AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>. 实现将是这样的:

UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken token) {
    X509Certificate certificate = (X509Certificate[)token.getCredentials();

    // Extract what you want from the certificate
    ...

    // Create the user information
    UserDetails user = ...

    return user;
}

您应该能够直接在user-service-ref命名空间属性 中使用对此 bean 的引用<x509 user-service-ref='yourUserServiceBean' />

于 2013-01-28T14:08:54.930 回答