Boa noite estou tentando fazer a implementação de roles e fiz da seguinte forma.
Configuração do SecurityFilterChain:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http.csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and().authorizeHttpRequests() .antMatchers(HttpMethod.POST, "/login").permitAll() .antMatchers(HttpMethod.GET, "/medicos").hasAnyRole("USER", "ADMIN") .antMatchers(HttpMethod.DELETE, "/medicos").hasRole("ADMIN") .antMatchers(HttpMethod.POST, "/medicos").hasRole("ADMIN") .anyRequest().authenticated() .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class) .build(); }
Classe Usuario com a relação com a classe Perfil:
@ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "tb_usuarios_perfis", joinColumns = @JoinColumn(name = "usuario_id"), inverseJoinColumns = @JoinColumn(name = "perfil_id")) private List<Perfil> perfis = new ArrayList<>(); @Override public Collection<? extends GrantedAuthority> getAuthorities() { return perfis; }
Classe Perfil:
@Data
@Table(name = "tb_perfis")
@Entity
public class Perfil implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@Override
public String getAuthority() {
return nome;
}
}
Deixei um usuario somente com o perfil ROLE_USER e quando tento fazer o delete, eu consigo... é como se a configuração olhasse somente se o usuário está logado, ignorando as roles.
Poderiam me ajudar?