Вам просто нужно привести свой пользовательский объект UserDetails, например, объект Customer в моем случае реализует объект UserDetails.
Customer userDetails = (Customer)SecurityContextHolder.getContext().
getAuthentication().getPrincipal();
Мой WebSecurityConfig равен
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private MyCustomAuthoritiesPopulator customerAuthPopulator;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication().ldapAuthoritiesPopulator(customerAuthPopulator)
.userDetailsContextMapper(userDetailsContextMapper())
.userDnPatterns("CN={0},OU=People,DC=com").contextSource()
.url("ldap://myCompanyAD-Domain:389");
}
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new CustomUserDetailsContextMapper();
}
}
CustomUserDetailsContextMapper Реализация
@Configuration
public class CustomUserDetailsContextMapper extends LdapUserDetailsMapper implements UserDetailsContextMapper {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public LdapUserDetails mapUserFromContext(DirContextOperations ctx, String username,
Collection<? extends GrantedAuthority> authorities) {
log.info("LdapUserDetails start");
LdapUserDetailsImpl details = (LdapUserDetailsImpl) super.mapUserFromContext(ctx, username, authorities);
Customer user = new Customer(details);
// details = (Customer) super.mapUserFromContext(ctx, username, authorities);
try {
user.setDisplayName(ctx.getStringAttribute("displayName"));
user.setEmail(ctx.getStringAttribute("mail"));
user.setPhone(ctx.getStringAttribute("telephoneNumber"));
user.setOrgUnit(ctx.getStringAttribute("division"));
log.info("DN from ctx: " + ctx.getDn()); // return correct DN
for (NamingEnumeration attr = ctx.getAttributes().getAll(); attr.hasMore();) {
Attribute attribute = (Attribute) attr.next();
log.info("Attribute id: " + attribute.getID());
for (NamingEnumeration val = attribute.getAll(); val.hasMore();) {
log.info("Attribute value: " + val.next());
}
}
log.info("Attributes size: " + ctx.getAttributes().size()); // always returns 0
} catch (NamingException e) {
log.error("Exception Caught", e);
}
return user;
}
@Override
public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
// default
}
}
Клиентская реализация
@Component
public class Customer implements LdapUserDetails {
private String DisplayName;
private String Email;
private String Phone;
private String OrgUnit;
private LdapUserDetailsImpl ldapCtx;
public Customer() {
super();
// TODO Auto-generated constructor stub
}
public Customer(LdapUserDetailsImpl copyMe ) {
super();
ldapCtx = copyMe;
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Customer [DisplayName=" + DisplayName + ", Email=" + Email + ", Phone=" + Phone + ", OrgUnit=" + OrgUnit
+ "] LdapUserDetails [" + ldapCtx.toString() + "]";
}
public String getDisplayName() {
return DisplayName;
}
public void setDisplayName(String displayName) {
DisplayName = displayName;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getOrgUnit() {
return OrgUnit;
}
public void setOrgUnit(String orgUnit) {
OrgUnit = orgUnit;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
ArrayList<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
list.add((new SimpleGrantedAuthority("ROLE_USER")));
return list;
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return ldapCtx.getPassword();
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return ldapCtx.getUsername();
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return ldapCtx.isAccountNonExpired();
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return ldapCtx.isAccountNonLocked();
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return ldapCtx.isCredentialsNonExpired();
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return ldapCtx.isEnabled();
}
@Override
public void eraseCredentials() {
// TODO Auto-generated method stub
}
@Override
public String getDn() {
// TODO Auto-generated method stub
return ldapCtx.getDn();
}
}