2014-03-27 4 views
6

usign Spring Security, ich versuche, die Benutzer-ID von meiner CustomUser-Instanz von LoadUserByUsername Methode auf meinem CustomUserDetailsService zurückgegeben, wie ich, um den Namen (get.Name()) mit Authentifizierung. Danke für irgendwelche Tipps!Wie Benutzer-ID von CustomUser auf Spring Security

Dies ist, wie ich die aktuellen Namen des angemeldeten Benutzers erhalten:

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

Und das ist die 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; 
} 
} 

Und die loadUserByUsername Methode auf meinem Dienst

@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() 
         ); 
} 

Antwort

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

Sie müssen diehinzufügenGetter-Methode, wenn Sie es nicht bereits haben.

+0

Arbeitete wie ein Charme! Danke –

+2

'Principal' kann injiziert werden. – naXa

+3

Injection über den Methodenparameter: @AuthenticationPrincipal CustomUser customUser – Tom