Sto provando a definire le regole di accesso a livello di metodo ma non funziona come mai.PreAuthorize non funziona su Controller
SecurityConfiguration
@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();
}
}
ExampleController
@EnableAutoConfiguration
@RestController
@RequestMapping({"/v2/"})
public class ExampleController {
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@RequestMapping(value = "/home", method = RequestMethod.GET)
String home() {
return "Hello World";
}
}
Ogni volta che provo ad accedere/v2/casa utilizzando user:user
esegue bene, non dovrebbe che mi darà un errore di accesso negato a causa di 'user 'non avendo ROLE_ADMIN
?
In realtà sto pensando di abbandonare le regole di accesso a livello di metodo e rispettare le regole della formica http(), ma devo sapere perché non funziona per me.
Grazie per la risposta. Ho provato a utilizzare l'annotazione su un'interfaccia 'CrudRepository' e ha funzionato bene.Avere un'interfaccia per ogni controller è piuttosto sciocco secondo me, in quanto un'interfaccia non è realmente necessaria. 'proxy-target-class = true' non ha fatto la differenza, le annotazioni continuano a non funzionare sui controller, tuttavia ha causato un arresto anomalo (se impostato su true) quando ha l'annotazione all'interno dell'interfaccia del repository (Can not subclass com. sun.proxy). Comunque penso che seguirò le regole nella configurazione di sicurezza, e forse userò PreAuth su alcuni dei miei repository. – prettyvoid
Un'altra cosa che ho notato, ho visto esempi in cui @PreAuthorize è stato utilizzato in un 'class' invece che in un'interfaccia' e dovrebbe funzionare .. Mi chiedo perché funzioni per loro ma non per me. – prettyvoid
Abilita Aop nel contesto dell'applicazione –