获取Spring Security中@PreFilter和@PostFilter中Collection / Array对象的句柄

时间:2015-05-15 06:54:27

标签: spring spring-mvc spring-security

在Spring Security中,@ PreFilter和@PostFilter可用于修剪/修剪参数/返回对象,filterObject引用对象中的每个元素,用于循环参数/返回Collection / Array。

但是,我需要获得整个实际Collection / Array的句柄,而不是上下文中的特定元素。有没有办法做到这一点?

原因是我正在创建外部授权服务,Spring Security使用该服务来查询和修剪集合/数组,此服务支持在单个问题中查询多个答案。一旦我获得对整个对象的引用,我就可以自己迭代这些元素来创建对外部化服务的请求。

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

1 个答案:

答案 0 :(得分:2)

假设返回值是可修改的,您可以使用@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;
    }
}