【发布时间】:2019-04-29 03:11:22
【问题描述】:
我是 JHipster 的新手,并从官方来源 (JHipster LDAP) 配置了 LDAP。
LDAP 身份验证现在可以正常工作了。
现在我想在 JHipster 数据库的第一个连接上创建新用户。
姓名/邮件/...的用户信息在 LDAP 上。
创建必须在从 LDAP 成功验证后发生。
有什么建议吗?
【问题讨论】:
我是 JHipster 的新手,并从官方来源 (JHipster LDAP) 配置了 LDAP。
LDAP 身份验证现在可以正常工作了。
现在我想在 JHipster 数据库的第一个连接上创建新用户。
姓名/邮件/...的用户信息在 LDAP 上。
创建必须在从 LDAP 成功验证后发生。
有什么建议吗?
【问题讨论】:
好的,我找到了答案。
Jhipster LDAP 连接实现后,需要修改类 CustomAuthenticationManager:authenticate,将 mapUserFromContext 方法替换为以下代码:
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> clctn) {
Optional<User> isUser = userRepository.findOneWithAuthoritiesByLogin(username);
if(!isUser.isPresent()){
UserDTO newUser = new UserDTO();
newUser.setLogin(authentication.getName());
newUser.setFirstName(ctx.getStringAttribute("givenName"));
newUser.setLastName(ctx.getStringAttribute("sn"));
newUser.setEmail(ctx.getStringAttribute("mail"));
newUser.setLangKey("fr");
newUser.setImageUrl("youimageurl");
userService.registerUser(newUser, "1");
}
isUser = userRepository.findOneWithAuthoritiesByLogin(username);
final User user = isUser.get();
Set<Authority> userAuthorities = user.getAuthorities();
Collection<GrantedAuthority> grantedAuthorities = new ArrayList<>();
for(Authority a: userAuthorities){
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(
a.getName());
grantedAuthorities.add(grantedAuthority);
}
return new org.springframework.security.core.userdetails.User(
username, "" , grantedAuthorities);
}
如果登录用户在 JHipster 数据库中未知(在 LDAP 身份验证成功后发生),则会创建一个新用户(newUser)。
使用 ctx.getStringAttribute("ldapProperty") 从 LDAP 获取信息。
【讨论】: