3
respostas

Como setar as roles?

Ola!

Estou tentando usar a anotacao @AuthenticationPrincipal Usuario user para pegar a Authorities.

Eis o problema entao: O professor ensina a criar a entidade de perfil e colocar na entidade do usuario: Ai esta minhas entidade de Perfil:

package com.compasso.academia.model;

import org.springframework.security.core.GrantedAuthority;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Perfil implements GrantedAuthority {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public String getAuthority() {
        return this.nome;
    }
}

Na parte de usuario eu vou mostrar somente o que interessa:

    @ManyToMany(fetch = FetchType.EAGER)
    private List<Perfil> perfis = new ArrayList<>();

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return this.perfis;
    }

Porem ele nao ensinou como setar um perfil! Quando eu crio um usuario e no meu codigo uso o seguinte

    @RequestMapping("dashboard")
    @ResponseBody
    public String dashboard(@AuthenticationPrincipal Usuario user){
        // TODO: Implementar a verificacao do cargo do usuario
        // If User: If Admin...
        return "Ola " + user.getNome() +
                "\nEmail: " + user.getEmail() +
                "Security: " + user.getAuthorities();
    }

Ele me retorna: Security: []

Entao.. O que posso fazer para quando criar um novo usuario ele ja ir com a role de usuario? E para mostrar essa role quando eu usar user.getAuthorities()

3 respostas

PS:

Apos adicionar manualmente no tabela o retorno do get.Authorities fica assim:

com.compasso.academia.model.Perfil@97a2139

Oi João,

Na criação do usuário você precisa carregar o perfil dele no banco e adicionar na lista de perfis:

Perfil padrao = perfilRepository.findByNome("ROLE_USUARIO");
usuario.adicionarPerfil(padrao);

Na classe usuário você cria esse método:

public void adicionarPerfil(Perfil novo) {
    this.perfis.add(novo);
}
Perfil padrao = perfilRepository.findByNome("ROLE_USUARIO");
usuario.adicionarPerfil(padrao);

Esse código vai junto do autenticarCliente em AutenticacaoViaTokenFilter?