【问题标题】:Spring Data Rest: How to secure findById() but not for projections?Spring Data Rest:如何保护 findById() 但不用于预测?
【发布时间】:2019-12-12 10:21:18
【问题描述】:

我正在使用 Spring-Data-Rest,并且我想确保实体的 GET-Request 仅在一个请求投影时(因为投影隐藏了所有明智的东西)。例如:

public interface UsergroupRepository extends OwnableRepository<User> {
    @PostAuthorize("@userService.isMe(returnObject)")
    Optional<Usergroup> findById(Long id);
}

但是这条规则也禁止访问投影。那我该怎么办?

【问题讨论】:

  • Spring Security 正在保护方法。我在您的界面中只看到一种方法。如果您有第二种方法,请展示该方法。它在你的OwnableRepository 界面中吗?

标签: security spring-security repository spring-data-rest projection


【解决方案1】:
public interface UsergroupRepository extends OwnableRepository<User> {
    @PostAuthorize("@userService.isMe(returnObject)")
    Optional<User> findById(Long id);

    Optional<UserProjection> findByIdWithProjection(Long id);
}

不要在投影界面添加@Projection。用户不需要知道它。

唯一的缺点是另一个端点会不同:/users/search/findByIdWithProjection (但是您可以使用@RestResource 重命名端点)

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 2019-08-14
    • 2020-05-29
    • 2019-06-19
    • 2016-04-17
    • 2023-03-16
    • 2019-09-30
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多