Spring Security, anotação de segurança de método (@Secured) não está funcionando (java config)
Estou tentando configurar uma anotação de segurança de método usando @Secured ("ADMIN") (sem nenhum XML, apenas java config, Spring Boot). Mas o acesso via funções não funciona.
Configuração de segurança:
@Configuration
@EnableWebSecurity
public class AppSecurityConfiguration extends WebSecurityConfigurerAdapter{
.....
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/**").fullyAuthenticated().and()
.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
.....
}
Quero restringir o acesso ao método do controlador:
@RestController
@RequestMapping("/api/groups")
public class GroupController {
@Autowired
private GroupService groupService;
@Secured("ADMIN")
@RequestMapping
public List<Group> list() {
return groupService.findAll();
}
}
Restringir o acesso pelo URL está funcionando, com:
.antMatchers("/api/**").hasAuthority("ADMIN")
Talvez eu tenha esquecido de especificar que quero restringir por papéis?
UPD: Pelas regras, Em que camada deve ser@PreAuthorize("hasRole('ADMIN')")
na camada Controller ou na camada Service?