2014-03-27 2 views
6

usign Spring Security, я пытаюсь получить идентификатор пользователя из моего экземпляра CustomUser, возвращенного из метода loadUserByUsername, в моем CustomUserDetailsService, как и я, чтобы получить имя (get.Name()) с аутентификацией. Спасибо за любые советы!Как получить идентификатор пользователя из CustomUser в Spring Security

Это, как я получить текущее имя зарегистрированного пользователя:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
String name = authentication.getName(); 

И это CustomUser

public class CustomUser extends User 
{ 

private final int userID; 




public CustomUser(String username, String password, boolean enabled, boolean accountNonExpired, 
        boolean credentialsNonExpired, 
        boolean accountNonLocked, 
        Collection<? extends GrantedAuthority> authorities, int userID) 
{ 
    super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); 
    this.userID = userID; 
} 
} 

И метод loadUserByUsername на моей службе

@Override 
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException 
{ 

    Usuario u = usuarioDAO.getUsuario(s); 



    return new CustomUser(u.getLogin(), u.getSenha(), u.isAtivo(), u.isContaNaoExpirada(), u.isContaNaoExpirada(), 
          u.isCredencialNaoExpirada(), getAuthorities(u.getRegraByRegraId().getId()),u.getId() 
         ); 
} 

ответ

12
Authentication authentication = ... 
CustomUser customUser = (CustomUser)authentication.getPrincipal(); 
int userId = customUser.getUserId(); 

Вы должны добавить getUserId() метод getter, если у вас его еще нет.

+0

Работали как очарование! Спасибо –

+2

'Principal' можно впрыснуть. – naXa

+3

Инъекция через параметр метода: @AuthenticationPrincipal CustomUser customUser – Tom

Смежные вопросы