Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们什么时候应该使用@PreAuthorize和@Secured_Java_Spring_Spring Security_Annotations_Spring Annotations - Fatal编程技术网

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。那么,如果安全批注是默认值,您如何在其中指定和逻辑