在 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;
}
}
在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;
}
}