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

标签 spring spring-mvc spring-security

在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/

相关文章:

java - Spring 数据 Autowiring 数据库连接无法通过 JUnit 测试

java - 只有一个部署在 Tomcat 中运行缓慢,另一个运行正常/快速

forms - 在 Spring MVC 中将值设置为 NULL 而不是空字符串

spring - 为什么 Spring 在 Authentication 和 UserDetails 中有重复字段?

java - Spring Data JPA 保存方法在 Java 8 功能图中的有效性

java - 在 Spring 中读取双重/多重属性

spring - 当您 POST 到接受 HTTP GET 的 Controller 操作时,为什么 Spring MVC 不会抛出错误?

spring-security - 如何在 spring boot 中获取登录用户名?

Java Future - Spring Authentication 在 AuditorAware 中为空

java - 将 Swagger Basic AUTH 添加到 Spring Boot 应用程序