Spring 安全@PreAuthorize SecurityExpressionRoot 或 PermissionEvaluator

Spring security @PreAuthorize SecurityExpressionRoot or PermissionEvaluator

Spring Security @PreAuthorize 接受了很多表达式,但是它如何决定表达式中方法的class,例如

@PreAuthorize("hasRole()") 来自 SecurityExpressionRoot@PreAuthorize("hasPermission()") 来自 PermissionEvaluator class。它如何决定使用哪个 class 实例?

我不是很熟悉Spring AOP 所以不能深入挖掘。

hasPermission 表达式也根据 SecurityExpressionRoot 求值,但后者委托给 PermissionEvaluator。如果你 have a look at the SecurityExpressionRoot source.

你可以很容易地看到这一点

默认情况下,权限表达式是 automatically denied,但设置不同的实例可以控制 hasPermission 表达式的行为方式。