繁体   English   中英

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

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

Spring Data Rest中是否有一种方法可以限制对公开实体的子链接的访问?

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

{
    "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"
        }
    }
}

我希望用户能够访问其他用户并查看用户名,但是希望限制对子链接的访问,以使他们无法通过遵循“ / users / 1 / todos”来看到彼此的待办事项。链接为例。

我试图使用投影仅显示用户名或@JsonIgnore批注以忽略集合,但是链接仍然可见并且仍然可以访问。

经过更多研究后,我发现了ExposureConfiguration类,该类是较新的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));
}

这样可以防止用户访问我的用户实体的任何关联链接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM