Java 我们什么时候应该使用@PreAuthorize和@Secured
我读了这篇文章Java 我们什么时候应该使用@PreAuthorize和@Secured,java,spring,spring-security,annotations,spring-annotations,Java,Spring,Spring Security,Annotations,Spring Annotations,我读了这篇文章 不过,我仍然不清楚两者在安全方面有什么大的区别?与@Secured相比,在什么情况下我们应该选择@PreAuthorize @PreAuthorize允许您对保护o方法的规则进行更细粒度的控制。您可以在其中使用SpEL表达式 使用@Secured保护一个方法会得到与@PreAuthorize相同的结果,但是@Secured是有限的,并且您没有太多的选项来调整规则(一个粗略的简化,规则是“静态的”) SpringSecurity3.0引入了使用SpringEL表达式作为授权机制的功
不过,我仍然不清楚两者在安全方面有什么大的区别?与@Secured相比,在什么情况下我们应该选择@PreAuthorize
@PreAuthorize
允许您对保护o方法的规则进行更细粒度的控制。您可以在其中使用SpEL表达式
使用@Secured
保护一个方法会得到与@PreAuthorize
相同的结果,但是@Secured
是有限的,并且您没有太多的选项来调整规则(一个粗略的简化,规则是“静态的”)
SpringSecurity3.0引入了使用SpringEL表达式作为授权机制的功能,此外还简单地使用了配置属性和访问决策投票者,这在以前已经见过。基于表达式的访问控制构建在相同的体系结构上,但允许将复杂的布尔逻辑封装在单个表达式中
@PreAuthorize
是一个较新的版本,因此您应该始终使用@PreAuthorize
,出于上述原因,这确实更好
事实上
@Secured(“ROLE\u ADMIN”)
与@PreAuthorize(“hasRole('ROLE\u ADMIN'))相同
此外,@PreAuthorize语法更具可读性
e、 g。
@Secured({“ROLE\u USER”,“ROLE\u ADMIN”})
被视为ROLE\u USER
或ROLE\u ADMIN
,这是一种奇怪而令人困惑的现象
另一方面,使用@PreAuthorize
可以使用“Spring表达式语言(SpEL)”,在这里可以明确定义或、和表达式,这显然很方便且可读性更高
因此,请使用@PreAuthorize
因此,如果我用@PreAuthorize(“hasRole('ROLE_ADMIN'))替换@securied(“hasRole('ROLE_ADMIN')”),在安全功能方面没有什么区别。@Zack:您不能将hasRole
与@securied
一起使用。您只能说@Secured({“ROLE\u ADMIN”})
。hasRole
意味着用SpEL执行一个方法@Secured
不支持SpEL。那么,如果安全批注是默认值,您如何在其中指定和逻辑