У меня есть приложение аутентификации и приложение ресурса, работающие вместе.
На сервере ресурсов мне нужно получить доступ к дополнительной информации, такой как электронная почта.
На стороне аутентификации у меня есть
Сущность пользователя:
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "userid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@Column(name = "username", nullable = false, length = 32)
private String userName;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "email", nullable = false, length = 32)
private String email;
@Column(name = "enabled", nullable = false)
private boolean enabled = false;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Collection<Role> roles;
...
}
И класс CustomUserDetails, который расширяет UserDetails
public class CustomUserDetails extends User implements UserDetails {
private static final long serialVersionUID = 1L;
private List<String> userRoles;
public CustomUserDetails(User user, List<String> userRoles) {
super(user);
this.userRoles = userRoles;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
String roles = StringUtils.collectionToCommaDelimitedString(userRoles);
return AuthorityUtils.commaSeparatedStringToAuthorityList(roles);
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public String getUsername() {
return super.getUserName();
}
А затем CustomUserDetailsService, который расширяет UserDetailsService и реализует loadUserByUsername
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUserName(username);
if (null == user) {
throw new UsernameNotFoundException("No user present with username: " + username);
} else {
List<String> userRoles = getPrivileges(user.getRoles());
return new CustomUserDetails(user, userRoles);
}
}
На этом этапе, если я проверяю «новые CustomUserDetails (user, userRoles)», у меня есть электронная почта пользователя в поле электронной почты, приходящая из БД.
Затем в моем приложении ресурсов на WS я пытаюсь получить доступ к информации о подключенном пользователе:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Но когда я проверяю аутентификацию с помощью отладки, мне не удается найти информацию электронной почты, все, что у меня есть, это значение userName в Principal.
Я что-то пропустил? Как мне поступить, чтобы получить больше информации о подключенном пользователе?