gpt4 book ai didi

java - Spring Security 注解的排序

转载 作者:行者123 更新时间:2023-12-01 10:16:56 24 4
gpt4 key购买 nike

如果一个方法有多个安全注释,它们的应用顺序是什么?

例如,它是定义注释的顺序,还是固定的,例如SecuredAnnotationSecurityMetadataSource 始终在 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不起作用

详情here ,方法安全拦截器一旦找到第一个支持的注释就会停止。

for (MethodSecurityMetadataSource s : methodSecurityMetadataSources) {
attributes = s.getAttributes(method, targetClass);
if (attributes != null && !attributes.isEmpty()) {
break;
}
}

it's intentional that DelegatingMethodSecurityMetadataSource only uses one source of metadata, the first which returns a non-null result

顺序为@PreAuthorize@Secured@RolesAllowed。因此问题中的方法一和方法二实际上相当于

@PreAuthorize("hasPermission(#target, 'read')")
void method();

@Secured 注释会被默默忽略。

关于java - Spring Security 注解的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com