La autorización previa no funciona en el controlador
Estoy tratando de definir reglas de acceso a nivel de método, pero no funciona de ninguna manera.
Configuración de seguridad
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().
withUser("user").password("user").roles("USER").and().
withUser("admin").password("admin").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/v2/**").authenticated()
.and()
.httpBasic()
.realmName("Secure api")
.and()
.csrf()
.disable();
}
}
Ejemplo de controlador
@EnableAutoConfiguration
@RestController
@RequestMapping({"/v2/"})
public class ExampleController {
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@RequestMapping(value = "/home", method = RequestMethod.GET)
String home() {
return "Hello World";
}
}
Cada vez que intento acceder a / v2 / home usandouser:user
se ejecuta muy bien, ¿no debería darme un error de acceso denegado debido a que el 'usuario' no tieneROLE_ADMIN
?
De hecho, estoy pensando en deshacerme de las reglas de acceso a nivel de método y apegarme a las reglas de hormiga http (), pero tengo que saber por qué no me funciona.