2017-03-03 20 views
11

Güzel bir vanilya spring-boot-starter-data-rest kurulumunu kullanıyorum ve PATCH yöntemini etkinleştirdim. Her şey çalışıyor, ama bir güvenlik kaygım var ve bunu azaltmanın önerilen yolunun ne olduğunu merak ediyorum.Spring Boot Veri Rest uygulamasında JSON-PATCH yollarını koruma

Sorun, erişilebilen varlıkların PATCHpath s farklı bir son noktadan güncelleştirilmesine izin vermesidir. Yani, bir comments son nokta ve bir article uç noktaya sahip olduğumu varsayalım. Her yorumun makalesiyle bire bir ilişkisi vardır. Sonra böyle bir şey yapabileceğini bir yorumu düzenlemek izni olan bir kullanıcı:

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

[ 
    { "op": "replace", "path": "/article/title", "value": "foobar2" } 
] 

ve böylece makalenin başlığını değiştirmek !!

Açıkçası bu iyi değil. Bu durumda, API'nın diğer bölümleri için "makale" ile ilişkilendirmenin çaprazlaması gerekir. Ama salt okunur olmalı.

Peki ... bunu Baharda nasıl yapabilirim?

Talebinizi engelleyin? Bir işleyici yöntemi uygulayın? Kendi Denetleyicimi sıfırdan yazabilir miyim?

Teşekkürler!

cevap

5

Yay-veri-dinlenme konusundaki mevcut uygulamanın, değerleri doğrudan fasulye üzerine uygulamak için SpEL'ye giden yolları dönüştürdüğü gözüküyor. Bakınız PatchOperation (v2.5.x).

  • yerine json-yama kullanmak "application/json" veya "uygulama/birleştirme-yama + json" içerik türü ile (kısmi güncellemeleri göndermek için YAMA isteği json-birleştirme:

    bu seçenekleri göz önünde bulundurun). Bu, @JsonIgnore ve diğer Jackson ek açıklamalarına saygı gösterecek ve ayrıca derneklere farklı davranacaktır.
  • yapabilirsiniz o
  • Kullanım uygulama düzeyinde bir güvenlik filtresi
  • hala ihtiyaç varsa her zaman, özel json-yama uygulaması oluşturabilirsiniz ekleyerek devre dışı "json-yama + json" örneğin tamamen, JPA'ya güvenmemek, yani sadece bağlı varlıkların kimliklerini açığa çıkarmak ve ResourceProcessor numaranıza özel bağlantılar sağlamak.
Ayrıca

, sen JPA kullanarak eğer ve Comment.article@ManyToOne ile açıklamalı dernek üzerinde hiçbir Basamaklı bulunduğundan emin olun. Makale nesnesi yama ile değiştirilse bile, yorumla birlikte kaydedilmez.

+0

Şimdiye kadar gittim ve PATCH'u application/json-patch + json content-type ile işlemek için özel bir yöntem uyguladık. Ve bu işe yarıyor. – sofend

+0

Spring'in json-birleştirme PATCH desteğini bilmiyorum. Şuna bak. – sofend

+0

Derneğin üzerinde hiçbir geçiş yok, ancak değişiklikler kesinlikle devam ediyor. Basamaklı bir mekanizma olduğunu sanmıyorum - aslında basamaklı konsept burada bile geçerli değil. Bu, nesne grafiğinde SpEL üzerinden saf yol navigasyonu olup, Seanstan DB'ye devam eden grafiğe yapılan değişiklikler ile birlikte. – sofend

İlgili konular