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

Zac*_*ack 4 java spring annotations spring-security spring-annotations

我读过这篇stackoverflow帖子 @Secured和@PreAuthorize在spring security 3中的区别是什么? 但是,我还不清楚两者在安全方面有什么大不同?与@Secured相比,在什么情况下我们应该选择@PreAuthorize?

Bog*_*dan 6

@PreAuthorize允许您对规则进行更细粒度的控制以确保方法安全.您可以在其中使用SpEL表达式.

保护方法可以获得与@Secured结果相同@PreAuthorize但结果@Secured有限的方法,并且您没有获得调整规则的大量选项(粗略的简化是规则是"静态的").

Spring Security 3.0引入了使用Spring EL表达式作为授权机制的能力,以及之前见过的配置属性和访问决策选民的简单使用.基于表达式的访问控制建立在相同的体系结构上,但允许将复杂的布尔逻辑封装在单个表达式中.


vto*_*tor 5

@PreAuthorize是一个较新的版本,所以你应该总是使用@PreAuthorize,这确实更好,因为这里提到的原因.

事实上

@Secured("ROLE_ADMIN") 是完全相同的 @PreAuthorize("hasRole('ROLE_ADMIN')")

此外,@ PreAuthorize语法更具可读性.

例如 @Secured({"ROLE_USER", "ROLE_ADMIN"})被视为ROLE_USER or ROLE_ADMIN,这是一种奇怪和令人困惑的东西.

在另一边与@PreAuthorize你定义明确or,and表达,这显然是方便和更具可读性.

那就去吧@PreAuthorize.