【发布时间】:2015-08-01 15:38:07
【问题描述】:
我有一个配置为以标准方式使用 Spring Security 3.2 的 Web 应用程序。
我正在使用@PreAuthorize 注释来保护Controllers 方法。
现在,我想拒绝访问每个控制器方法除非用@PreAuthorize注释。
我尝试了以下方法:
超级控制器
每个控制器都从带有注释的超级控制器扩展而来:@PreAutorize("denyAll")。这种方法似乎不起作用,因为控制器的方法注释被忽略了。一切都是禁止的。
@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
在全局方法安全标签中使用切入点表达式
<global-method-security pre-post-annotations="enabled">
<protect-pointcut expression="execution(* com.acme.*Controller.*(..))" access="denyAll" />
</global-method-security>
这种方法也失败了:没有注释的控制器方法仍然可以访问。
【问题讨论】:
标签: java spring spring-security