如何限制对 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.
在 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.