我读了这篇stackoverflow帖子 What's the difference between @Secured and @PreAuthorize in spring security 3? 但是,我还不清楚两者在安全方面有什么大不同?与@Secured相比,在什么情况下我们应该选择@PreAuthorize?
答案 0 :(得分:6)
@PreAuthorize
允许您对规则进行更细粒度的控制以确保方法安全。您可以在其中使用SpEL表达式。
使用@Secured
保护方法可以获得与@PreAuthorize
相同的结果,但@Secured
是有限的,而您没有获得调整规则的大量选项(简化它的简化)规则是“静态的”)。
Spring Security 3.0引入了使用Spring EL表达式作为授权机制的能力,以及之前见过的配置属性和访问决策选民的简单使用。基于表达式的访问控制建立在相同的体系结构上,但允许将复杂的布尔逻辑封装在单个表达式中。
答案 1 :(得分:5)
@PreAuthorize
是一个较新的版本,因此您应该始终使用@PreAuthorize
,由于here提到的原因,这确实更好。
事实上
@Secured("ROLE_ADMIN")
与@PreAuthorize("hasRole('ROLE_ADMIN')")
此外,@ PreAuthorize语法更具可读性。
e.g。
@Secured({"ROLE_USER", "ROLE_ADMIN"")
被视为ROLE_USER
or
ROLE_ADMIN
,这是一种奇怪且令人困惑的事情。
另一方面@PreAuthorize
明确定义or
,and
表达式,这显然方便且可读性更高。
所以请使用@PreAuthorize
。