我们什么时候应该使用@PreAuthorize和@Secured

时间:2015-02-21 17:08:20

标签: java spring spring-security annotations spring-annotations

我读了这篇stackoverflow帖子 What's the difference between @Secured and @PreAuthorize in spring security 3? 但是,我还不清楚两者在安全方面有什么大不同?与@Secured相比,在什么情况下我们应该选择@PreAuthorize?

2 个答案:

答案 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明确定义orand表达式,这显然方便且可读性更高。

所以请使用@PreAuthorize