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