[英]Ordering of Spring Security annotations
如果一个方法有多个安全注解,它们的应用顺序是什么?
例如,它是定义注释的顺序,还是固定的,例如SecuredAnnotationSecurityMetadataSource
总是在PrePostAnnotationSecurityMetadataSource
之前PrePostAnnotationSecurityMetadataSource
?
换句话说,调用这些方法时的求值顺序是什么?
@Secured("ROLE_ADMIN")
@PreAuthorize("hasPermission(#target, 'read')")
void method1();
@PreAuthorize("hasPermission(#target, 'read')")
@Secured("ROLE_ADMIN")
void method2();
@PreAuthorize("hasRole('ADMIN') && hasPermission(#target, 'read')")
void method3();
@PreAuthorize("hasPermission(#target, 'read') && hasRole('ADMIN')")
void method4();
tl; dr:混合@Secured
和@PreAuthorize
不起作用。
至于详细的 在这里,一旦找到了第一个支持注释的方法安全性拦截停止。
for (MethodSecurityMetadataSource s : methodSecurityMetadataSources) {
attributes = s.getAttributes(method, targetClass);
if (attributes != null && !attributes.isEmpty()) {
break;
}
}
DelegatingMethodSecurityMetadataSource
故意只使用一个元数据源,第一个返回非空结果
顺序是@PreAuthorize
≻ @Secured
≻ @RolesAllowed
。 因此问题中的方法一和方法二实际上等效于
@PreAuthorize("hasPermission(#target, 'read')")
void method();
即@Secured
注释被默默地忽略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.