在Spring Security中,@PreFilter和@PostFilter可用于修剪/修剪参数/返回对象,filterObject引用对象中的每个元素,并用于循环遍历参数/返回集合/数组。
但是,我需要获取整个实际集合/数组的句柄,而不是上下文中的特定元素。有什么办法可以做到这一点吗?
原因是我正在创建一个外部化授权服务,Spring Security 使用该服务来查询和修剪集合/数组,并且该服务支持在单个问题中查询多个答案。一旦我获得了对整个对象的引用,我就可以自己迭代这些元素来创建对外部化服务的请求。
这可以在 Spring Security 中完成吗?我将其实现为自定义 express 处理程序。
最佳答案
假设返回值是可修改的,则可以使用@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;
}
}
关于spring - 在Spring Security中的@PreFilter和@PostFilter中获取Collection/Array对象的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253302/