3
respostas

Existe como adicionar um regra para todos métodos exceto um no Spring Security

No definição da autorização do usuário, foi mostrado como adicionar uma regra para um método específico. Minha dúvida é se teria como adicionar a regra informando a exceção, tipo para acessar a operação "tópicos" precisa ter o perfil de moderador exceto o método GET. Eu teria que criar todas as 5 regras?

.antMatchers(HttpMethod.GET, "/topicos").permitAll()
.antMatchers(HttpMethod.GET, "/topicos/*").permitAll()
.antMatchers(HttpMethod.POST, "/topicos").hasRole("MODERADOR")
.antMatchers(HttpMethod.PUT, "/topicos/*").hasRole("MODERADOR")
.antMatchers(HttpMethod.DELETE, "/topicos/*").hasRole("MODERADOR")
3 respostas

Consegui resolver da forma abaixo, mas não acredito que seja a melhor forma

.antMatchers(HttpMethod.GET, "/topicos").permitAll()
.antMatchers(HttpMethod.GET, "/topicos/*").permitAll()
.antMatchers("/topicos").hasRole("MODERADOR")
.antMatchers("/topicos/*").hasRole("MODERADOR")
.antMatchers(HttpMethod.GET, "/topicos").permitAll()
.antMatchers(HttpMethod.GET, "/topicos/*").permitAll()
.antMatchers("/topicos").hasRole("MODERADOR")
.antMatchers("/topicos/*").hasRole("MODERADOR")

A ordem das regras é importante e as regras mais específicas devem vir primeiro. Da forma que está, tudo que começa com /topicos e for GET será public, todo o resto precisará da ROLE "MODERADOR"

Bom Otávio, a intenção é essa mesmo. Só queria saber se tem alguma forma mais simples para fazer isso, tipo em um único comando. De qualquer forma obrigado pela resposta!