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批注以忽略集合,但是链接仍然可见并且仍然可以访问。
答案 0 :(得分:1)
进行更多研究后,我发现了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));
}
这会阻止用户访问我的User实体的任何关联链接。
还有许多其他选项可用于配置实体曝光。 我找不到很多有关此功能的文档,但是: Customizing Default Exposure。