Deseamos brindarte la mejor información que encontramos en línea. Queremos que te sea de mucha ayuda y si deseas comentarnos alguna mejora hazlo libremente.
Solución:
Debe completar el contenido del rol usted mismo al crear sus Detalles de usuario:
public class SecurityUser implements UserDetails{
String ROLE_PREFIX = "ROLE_";
String userName;
String password;
String role;
public SecurityUser(String username, String password, String role)
this.userName = username;
this.password = password;
this.role = role;
@Override
public Collection extends GrantedAuthority> getAuthorities()
List list = new ArrayList();
list.add(new SimpleGrantedAuthority(ROLE_PREFIX + role));
return list;
Básicamente, lo que debe hacer es anular el método: getAuthorities
y rellene el contenido de su campo de función en el GrantedAuthority
lista.
Lo que dijeron Divelnto, zapl y thorinkor es correcto. Pero la pregunta debe ser sobre “Rol” y NO “Roles”. O, si tiene usuarios y roles en una tabla, es un mal diseño. Es posible que desee revisar su enfoque de diseño. Debe tener una entidad de rol separada. Y en su UserService puede hacer algo como:
AppUser user = userRepository.findByUsername(username);
Set grantedAuthorities = new HashSet<>(); // use list if you wish
for (AppRole role : user.getRoles())
grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),
grantedAuthorities
);
Muestras: muestra1 muestra2 muestra3
En la base de datos, puede almacenar el nombre del rol como – (p. ej.) ADMIN/EDITOR/VIEWER en la base de datos o almacenar roles como ROLE_ADMIN/ROLE_… entonces es posible que desee usar hasRole/hasAuthoriy. Espero eso ayude.
Para referencia, eche un vistazo aquí:
Primavera relacionada con la seguridad 1
Primavera relacionada con la seguridad 2