通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查
Posted
技术标签:
【中文标题】通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查【英文标题】:Authenticate via spring LDAP with additional security check in database 【发布时间】:2013-09-15 06:54:10 【问题描述】:LDAP 身份验证后,我想检查数据库中的用户 ID 是否列在用户表中。
我怎样才能做到这一点?我在 Google 上看到的只是通过 LDAP 进行的身份验证和数据库上的用户角色检索。
【问题讨论】:
【参考方案1】:你必须改变你拥有用户 Prancipal 的方式:
你会保留你的 ldapProvider :
<beans:bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
....
<beans:bean id="customUserDetailsMapper" class="xxxxx.CustomUserDetailsMapper">
<beans:constructor-arg ref="customUserDetailService" />
</beans:bean>
<beans:bean id="customUserDetailService" class="xxxxxx.CustomUserDetailService">
</beans:bean>
定义一个自定义的 UserDatailsMapper :
public class CustomUserDetailsMapper extends LdapUserDetailsMapper
private UserDetailsService userDetailService;
public CustomUserDetailsMapper (UserDetailsService userDetailService)
this.userDetailService = userDetailService;
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx,
String username, Collection<? extends GrantedAuthority> authorities)
return (UserDetails) this.userDetailService.loadUserByUsername(username);
并定义一个自定义 UserDetailsService :
public class CustomUserDetailService implements UserDetailsService
@Autowired
protected UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
UserDb user = userRepository.findByUserName(username);
if (UserDb == null)
throw new UsernameNotFoundException(username);
// Construct customUserDetails
return (UserDetails)customUserDetails;
【讨论】:
我是 Spring Security 的新手,所以我很欣赏一些解释。UserDetails
来自哪里?
org.springframework.security.core.userdetails.UserDetails 这是spring security的核心接口
@SciasTwentyThree 你好,SciasTwentyThree 你实现目标了吗?我正在为 LDAP 身份验证后的数据库层寻找类似的严格安全性,如果您能分享您的答案,那就太好了 - 谢谢以上是关于通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查的主要内容,如果未能解决你的问题,请参考以下文章
通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误
使用 Spring Security 3 进行 LDAP 身份验证
Spring Security:针对多个 LDAP 服务器和基于 DAO 的身份验证进行身份验证
使用 CAS 进行身份验证和 LDAP 进行授权的 Spring 项目
通过spring security进行的Active Directory身份验证会返回由LDAP引起的有效用户的错误凭据:错误代码49