Ich verwende ein hübsches Vanille-spring-boot-starter-data-rest
-Setup und aktivierte die PATCH
-Methode. Alles funktioniert, aber ich habe Sicherheitsbedenken und frage mich, was ich am besten dafür empfehle.Sichern von JSON-PATCH-Pfaden in der Spring Boot Data Rest-Anwendung
Das Problem ist, dass PATCH
path
s erlauben erreichbare Entitäten von einem anderen Endpunkt aktualisiert werden. Angenommen, ich habe einen comments
Endpunkt und einen article
Endpunkt. Jeder Kommentar hat eine direkte Zuordnung zu seinem Artikel. Ein Benutzer, der die Berechtigung um einen Kommentar zu bearbeiten hat könnte dann so etwas tun:
PATCH http://some.domain.foo/api/comments/1234
Content-Type: application/json-patch+json
[
{ "op": "replace", "path": "/article/title", "value": "foobar2" }
]
und damit den Titel des Artikels ändern !!
Das ist eindeutig nicht gut.
In diesem Fall muss für andere Teile der API die Zuordnung zum "Artikel" verfahrbar sein. Aber es muss schreibgeschützt sein.
Also ... wie erreiche ich das im Frühling?
Die Anfrage abfangen? Eine Handlermethode implementieren? Schreiben Sie meinen eigenen Controller von Grund auf neu?
Danke!
Bis jetzt habe ich eine benutzerdefinierte Methode für die Handhabung von PATCH mit der Anwendung/json-patch + json content-type implementiert. Und das funktioniert. – sofend
Ich kenne die Unterstützung von Spring für json-merge PATCH nicht. Werde sich das ansehen. – sofend
Es gibt keine Kaskadierung der Assoziation, aber die Änderungen werden definitiv beibehalten. Ich glaube nicht, dass es sich um einen Kaskadenmechanismus handelt - das Kaskadierungskonzept trifft hier gar nicht zu. Dies ist eine reine Pfadnavigation in dem Objektgraphen über SpEL, wobei die Änderungen des Graphen von der Sitzung zu der DB bestehen. – sofend