Eu gostaria de saber como eu faço pra ter acesso as informações do usuário que está logado na sessão do spring. Estou utilizando o primefaces e quando eu vou realizar uma ação no bean como usuario.acesso == “Admin” . Ela não realiza a comparação pois a variável está nula. O spring security bloqueia essas informações ? tem alguma maneira certa de pegar elas ?
Tente da seguinte forma:
protected Usuario getUsuario() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return (Usuario) authentication.getDetails();
}
Esse metodo me retorna apenas essas informações
org.springframework.security.web.authentication.WebAuthenticationDetails@380f4: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: e54ba025378923214898fb4b41ef
porem queria informações como o nivel de acesso dele como :
ROLE_ADMIN ou ROLE_COMMON entende ?
obs: essas informações estão contidas na coluna acesso do Usuario.
Se você configurou o usuário no Spring Security da seguinte forma, deveria funcionar.
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(usuario.getLogin(), usuario.getSenha(), usuario.getListaPerfil());
token.setDetails(usuario);
SecurityContextHolder.createEmptyContext();
SecurityContextHolder.getContext().setAuthentication(token);
e sua classe Usuario deve implementar UserDetails do Spring
O pior que não tive muito tempo pro projeto e acabei configurando ele bem simples apenas no xml do spring security mesmo. Então é quase impossível conseguir essas informações ne ?
O que você vai precisar é de:
public class Usuario implements UserDetails {
getUsername(): String
getPassword(): String
getAuthorities(): List<Perfil>
}
public class Perfil implements GrantedAuthority {
}
Após realizar o login com sucesso, você salva o Usuario no contexto do Spring Security