我正在使用Spring Security来保护REST Service端点。我基本上需要检查用户是否具有权限,用户是否可以使用给定的参数调用该函数,最后,我对输出进行过滤,以使用户看不到不应有的东西。
为此,我有这组注释:
@PostFilter("#canViewOwnAssignment.canView(filterObject) or #canViewAllAssignments.canView(filterObject)")
@PreAuthorize("hasAnyAuthority('canViewOwnAssignment', 'canViewAllAssignments') and (#canViewOwnAssignment.canEnter(userId) or #canViewAllAssignments.canEnter(userId))")
...对于所有方法。与上述代码段唯一不同的是 canViewOwnAssignment 和 .canEnter()的参数。
我想简化一下,这样我可以有一个像这样的注解:@MyAnnotation(bean = CanViewAssignment.class, args = {"userId"})
我该如何实现?
我尝试扩展PrePostAnnotationSecurityMetadataSource.class,因为那是解析注释的一个,但是我不能仅使用@Primary来覆盖它,因为Bean实例已被烘焙到GlobalMethodSecurityDefinitionParser.class
中。如果不需要,我不想开始重写Spring Security的一半,而只想重写一个方法。