在Spring Security中,@ PreFilter和@PostFilter可用于修剪/修剪参数/返回对象,filterObject引用对象中的每个元素,用于循环参数/返回Collection / Array。
但是,我需要获得整个实际Collection / Array的句柄,而不是上下文中的特定元素。有没有办法做到这一点?
原因是我正在创建外部授权服务,Spring Security使用该服务来查询和修剪集合/数组,此服务支持在单个问题中查询多个答案。一旦我获得对整个对象的引用,我就可以自己迭代这些元素来创建对外部化服务的请求。
可以在Spring Security中完成吗?我将其作为自定义快递处理程序实现。
答案 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;
}
}