Prezados boa noite, estou dando continuidade em um projeto web e implementei nele o spring security, esta funcionando, mais minha tabela de usuarios é diferente das encontradas
em tutoriais sobre o security, mais tudo ok, como disse tá funcionando mais, gostaria de mostrar o nome do usuario logado e não o seu login ( encontrei também algumas pessoas querendo a mesma coisa em alguns artigos )
No meu modelo implementei a classe UserDetails, inicialmente isto não estava sendo necessario mais achei que para o meu intento precisaria fazer isto
mais agora minha aplicacao da o erro org.springframework.security.core.userdetails.User cannot be cast to br.com.dominio.modelo.Usuario
Entendi o erro, mais achei que por estar implementando UserDetails isto não deveria ocorrer.
Entendi também que na implementação da classe UserDetailsService o metodo loadUserByUsername retorna um objeto do tipo user ( so Spring ) e talvez por isto
eu não consiga fazer o contrario??? continuo achando que por estar implementando userdetails isto não deveria ocorrer.
Abaixo coloquei alguns códigos quem puder me dar uma dica agradeço …
[code]
public class Usuario implements Serializable, UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="usr_codigo")
private Integer usrCodigo;
@Column(name="usr_administrador")
private String usrAdministrador;
@Column(name="usr_ativo")
private Boolean usrAtivo;
@Column(name="usr_dias_expiracao")
private Integer usrDiasExpiracao;
@Column(name="usr_email")
private String usrEmail;
@Column(name="usr_foto")
private byte[] usrFoto;
@Temporal( TemporalType.TIMESTAMP)
@Column(name="usr_inicio_expiracao")
private Date usrInicioExpiracao;
@Column(name="usr_login")
private String login;
@Column(name="usr_nome")
private String usrNome;
@Column(name="usr_senha")
private String password;
@Column(name="usr_tipo_expiracao")
private String usrTipoExpiracao;
//bi-directional many-to-many association to Papel
@ManyToMany
@JoinTable(
name="usuario_papel"
, joinColumns={
@JoinColumn(name="usr_codigo")
}
, inverseJoinColumns={
@JoinColumn(name="pa_id")
}
)
private List<Papel> papels;
@Transient
public Collection<GrantedAuthority> getAuthorities() {
List<GrantedAuthority> result = new ArrayList<GrantedAuthority>();
for (Papel role : papels) {
result.add(new GrantedAuthorityImpl(role.getPaPapel()));
}
return result;
}
[/code]
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
@Resource(name="UsuarioRepository")
private UsuarioDao usuarioDao;
@Transactional
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException{
try {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("login", username );
//Usuario p = (Usuario) usuarioDao.findByNamedQueryAndNamedParams("Usuario.findByLogin", parameters);
//.getUsuarioByLogin(username);
Usuario u = usuarioDao.findOneResult("Usuario.findByLogin", parameters);
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
List<Papel> lista = u.getPapels();
Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
//grantedAuthorities.add(new GrantedAuthorityImpl("ROLE_ADMIN")); // RoleName = "ROLE_ADMIN" or "ROLE_REGISTERED"
for ( Papel p : lista) {
grantedAuthorities.add(new GrantedAuthorityImpl(p.getPaPapel())); // RoleName = "ROLE_ADMIN" or "ROLE_REGISTERED"
}
org.springframework.security.core.userdetails.User user = new org.springframework.security.core.userdetails.User(u.getLogin(), u.getPassword(), enabled, accountNonExpired,
credentialsNonExpired, accountNonLocked, grantedAuthorities);
return user;
} catch (NoResultException e) {
throw new UsernameNotFoundException("No such user");
}
}
}