Web 应用程序使用 Spring WebMVC 和 Spring Security。问题出现了为什么 @PreAuthorize 注释如果挂在控制器类中的嵌套方法上不起作用:
@GetMapping(value= "/method")
public String exampleForMethodPreAuthorize() {
if(methodController()){
return "forMethodPreAuthorize";
}
else return null;
}
@PreAuthorize("hasRole('ADMIN')")
public final boolean methodController(){
return true;
}
上面的代码不起作用,即 该方法适用于任何用户,即使是没有管理员访问权限的用户。虽然,如果将此注释放在控制器方法本身上:
@PreAuthorize("hasRole('ADMIN')")
@GetMapping(value= "/method")
public String exampleForMethodPreAuthorize() {
return "forMethodPreAuthorize";
}
那么在这种情况下一切正常。自然地,servlet 上下文配置文件使用组件扫描和
<security:global-method-security pre-post-annotations="enabled"/>
提前感谢您的回复。