Доступ к электронной почте пользователя от принципала - PullRequest
0 голосов
/ 29 октября 2018

У меня есть приложение аутентификации и приложение ресурса, работающие вместе. На сервере ресурсов мне нужно получить доступ к дополнительной информации, такой как электронная почта.

На стороне аутентификации у меня есть Сущность пользователя:

@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.

Я что-то пропустил? Как мне поступить, чтобы получить больше информации о подключенном пользователе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...