如何限制对 Spring Data Rest 中子链接的访问?

How to restrict access to sub-links in Spring Data Rest?

在 Spring Data Rest 中有没有办法限制对公开实体的子 link 的访问?

例如,我的 Data Rest 应用程序中针对特定用户的 GET 请求 returns 以下内容:

{
    "id": 1,
    "username": "admin",
    "_links": {
        "self": {
            "href": "http://localhost:8080/api/v1/users/1"
        },
        "user": {
            "href": "http://localhost:8080/api/v1/users/1"
        },
        "todoLists": {
            "href": "http://localhost:8080/api/v1/users/1/todoLists"
        },
        "contacts": {
            "href": "http://localhost:8080/api/v1/users/1/contacts"
        },
        "todos": {
            "href": "http://localhost:8080/api/v1/users/1/todos"
        },
        "contactRequestsReceived": {
            "href": "http://localhost:8080/api/v1/users/1/contactRequestsReceived"
        },
        "assignedTodos": {
            "href": "http://localhost:8080/api/v1/users/1/assignedTodos"
        },
        "contactRequestsSent": {
            "href": "http://localhost:8080/api/v1/users/1/contactRequestsSent"
        }
    }
}

我希望用户能够访问其他用户并查看用户名,但希望限制对子 link 的访问,以便他们无法通过以下方式查看彼此的待办事项以下是“/users/1/todos” link 例如。

我尝试使用投影仅显示用户名或@JsonIgnore 注释以忽略集合,但 links 仍然可见且可访问。

经过更多研究后,我发现了 ExposureConfiguration class,它是更新的 Spring Data Rest 版本的一部分。我必须从 Spring Boot 1.5.8 升级到 2.1.1 才能使用它。

现在在我的 RestConfig 中我正在这样做:

@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {

    ExposureConfiguration exposureConfiguration = config.getExposureConfiguration();

    exposureConfiguration.forDomainType(User.class)
        .withAssociationExposure((metdata, httpMethods) -> httpMethods.disable(HttpMethod.GET));
}

这会阻止用户访问我的用户实体的任何关联链接。

还有许多其他选项可用于配置实体公开。 我找不到很多关于此功能的文档,但是: Customizing Default Exposure.