在 Spring 安全性中获取 @PreFilter 和 @PostFilter 中 Collection/Array 对象的句柄

Obtaining handle to Collection/Array object in @PreFilter and @PostFilter in Spring Security

在SpringSecurity中,@PreFilter和@PostFilter可用于trim/pruneargument/return对象,filterObject引用对象中的每个元素并用于循环遍历argument/return Collection/Array.

但是,我需要将实际 Collection/Array 作为一个整体而不是上下文中的特定元素来处理。有什么办法吗?

原因是我正在创建一个外部化的授权服务,Spring 安全使用它来查询和修剪 collection/array,并且该服务支持在单个问题中查询多个答案。一旦获得对整个对象的引用,我就可以自己遍历元素以创建对外部化服务的请求。

这可以在 Spring 安全中完成吗?我将其实现为自定义快递处理程序。

假设 return 值是可修改的,您可以使用@PostAuthorize。例如:

@PostAuthorize("@mySecurityFilter.filter(authentication, returnObject)")
List<String> findAllMessages();

假设您创建了一个名为 "mySecurityFilter" 的 Bean,看起来像这样:

@Component
public class MySecurityFilter {

    public boolean filter(Authentication authentication, List<String> domain) {
        // submit to service and get back all allowed values
        List<String> allowed = Arrays.asList("Hello");

        Iterator<String> iValues = domain.iterator();
        while(iValues.hasNext()) {
            String value = iValues.next();
            if(!allowed.contains(value)) {
                iValues.remove();
            }
        }

        return true;
    }
}