Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring Boot Data Rest应用程序中保护JSON-PATCH路径_Java_Spring_Spring Mvc_Json Patch - Fatal编程技术网

Java 在Spring Boot Data Rest应用程序中保护JSON-PATCH路径

Java 在Spring Boot Data Rest应用程序中保护JSON-PATCH路径,java,spring,spring-mvc,json-patch,Java,Spring,Spring Mvc,Json Patch,我正在使用一个非常普通的springbootstarterdatarest设置,并启用了PATCH方法。一切都在运行,但我有一个安全问题,不知道什么是减轻它的建议方法 问题在于,PATCHpaths允许从不同的端点更新可访问的实体。因此,假设我有一个注释端点和一个文章端点。每个评论都与其文章有一对一的关联。拥有编辑评论权限的用户可以执行以下操作: PATCH http://some.domain.foo/api/comments/1234 Content-Type: application/js

我正在使用一个非常普通的
springbootstarterdatarest
设置,并启用了
PATCH
方法。一切都在运行,但我有一个安全问题,不知道什么是减轻它的建议方法

问题在于,
PATCH
path
s允许从不同的端点更新可访问的实体。因此,假设我有一个
注释
端点和一个
文章
端点。每个评论都与其文章有一对一的关联。拥有编辑评论权限的用户可以执行以下操作:

PATCH http://some.domain.foo/api/comments/1234
Content-Type: application/json-patch+json

[
    { "op": "replace", "path": "/article/title", "value": "foobar2" }
]
从而改变文章的标题

显然这不好

在这种情况下,对于API的其他部分,“项目”的关联需要是可遍历的。但它必须是只读的

所以。。。我如何在春天做到这一点

拦截请求? 实现一个处理程序方法? 从头开始编写我自己的控制器


谢谢

似乎spring数据rest的当前实现将路径转换为SpEL,以便直接在bean上应用值。看

考虑以下选项:

  • 使用json merge补丁请求发送部分更新(使用“application/json”或“application/merge patch+json”内容类型),而不是json补丁。这将尊重
    @JsonIgnore
    和其他Jackson注释,并以不同的方式处理关联
  • 您可以完全禁用“json补丁+json”,例如通过添加安全过滤器
  • 如果仍然需要,您可以随时创建自定义json修补程序实现
  • 使用不依赖JPA的应用程序级连接,即仅公开链接实体的ID,并在
    ResourceProcessor
    中提供自定义链接

此外,如果您正在使用JPA和
Comment.article
@ManyToOne
注释,请确保关联中没有级联。即使文章对象是用补丁修改的,它也不会与注释一起保存。

到目前为止,我已经实现了一个自定义方法,用application/json patch+json内容类型处理补丁。我不熟悉Spring对json合并补丁的支持。我来看看,关联上没有层叠,但变化肯定是持久的。我不认为这是通过级联机制实现的——事实上,级联的概念在这里根本不适用。这是通过SpEL在对象图中进行的纯路径导航,其中对图的更改从会话保存到数据库。很高兴知道,谢谢。我建议在SpringDataREST项目中添加一个问题。如果您可以共享自己的补丁impl(如果适用),那也太好了。顺便说一句,我们在项目中禁用了json补丁并只使用json合并。