Ho un'applicazione Web configurata per utilizzare Spring Security 3.2 in modo standard.Spring Security: nega l'accesso ai metodi del controller, se manca l'annotazione @PreAuthorize
Sto utilizzando l'annotazione @PreAuthorize
per proteggere il metodo Controllers. Ora, vorrei negare l'accesso a ciascun metodo di controller UNLESS è annotato con @PreAuthorize
.
Ho provato i seguenti approcci:
super-regolatore
Ogni controller si estende da un controllore super-annotato con: @PreAutorize("denyAll")
. Questo approccio non sembra funzionare perché le annotazioni dei metodi dei controllori sono ignorate. Tutto è proibito
@PreAutorize("denyAll")
public class SuperController {
}
public class MyController extends SuperController {
@PreAuthorize("hasRole('SUPERHERO')")
@RequestMapping(value = URL_PREFIX + "Add.do", method = RequestMethod.GET)
public String doStuff(Model model) {
...
}
}
AOP
Usando un'espressione pointcut nel tag globale metodo di protezione
<global-method-security pre-post-annotations="enabled">
<protect-pointcut expression="execution(* com.acme.*Controller.*(..))" access="denyAll" />
</global-method-security>
Questo approccio fallisce anche: i metodi di controllori che non sono annotati sono ancora accessibili.