Spring Security Mostrar o nome do usuário

0 respostas
R

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

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

}
Criado 16 de fevereiro de 2013
Respostas 0
Participantes 1