Como faço para restringir acessos após efetuar o Login? Tentei configurar o ROLE_ADMIN e utilizar a anotação @PreAuthorize no CRUD, mas não obtive sucesso.
Meu código:
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
if (this.nivel_acesso.equals(NivelAcesso.ADMINISTRADOR)) {
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
}
return authorities;
}
@DeleteMapping("/{id}")
@Transactional
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity excluir(@PathVariable Long id) {
var produto = repository.getReferenceById(id);
produto.excluir();
return ResponseEntity.noContent().build();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.requestMatchers(HttpMethod.POST, "/login").permitAll()
.requestMatchers(HttpMethod.DELETE, "/produtos/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
Detalhe: ele puxa do Enum o parâmetro: administrador.