【问题标题】:Restrict documents returned by spring-data-rest限制 spring-data-rest 返回的文档
【发布时间】:2016-02-22 16:32:49
【问题描述】:

Dog 使用私有字段owner 将所有者用户名保留在类User 中(实现UserDetails):

@Document
public class Dog {

    @Id
    private ObjectId id;

    private String owner;
}

@Document
public class User implements UserDetails {

    @Id
    private ObjectId id;

    private String username;

}

这些文档使用spring-data-mongodb 持久化并使用spring-data-rest 公开。用户使用 Spring Security 进行身份验证,因此可以使用 @AuthenticationPrincipal

要求 REST 只能访问用户拥有的狗。是否可以调整 spring-data-rest 以仅返回集合 dogs 中的文档子集,具有“所有者”字段的文档与身份验证主体返回的 User 实例中的用户名相同?

【问题讨论】:

    标签: java spring spring-security spring-data-mongodb spring-data-rest


    【解决方案1】:

    我在这种情况下所做的是实现自定义RepositoryInvoker

    调用者是 Spring Data Rest 创建的那个的代理。这个想法是拦截invokeFindAll(或其他应按所有权过滤的方法)并委托给实现过滤的查询方法。

    请注意,我使用 Spring Data JPA 和 Specfications 来实现过滤谓词。我相信类似的方法在 Mongo 中应该是可行的。

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2012-08-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多