2017-03-03 7 views
11

मैं एक सुंदर वेनिला spring-boot-starter-data-rest सेटअप का उपयोग कर रहा हूं और PATCH विधि सक्षम कर रहा हूं। सब काम कर रहे हैं, लेकिन मुझे सुरक्षा चिंता है और आश्चर्य है कि इसे कम करने का अनुशंसित तरीका क्या है।वसंत बूट डेटा आराम अनुप्रयोग में JSON-PATCH पथ सुरक्षित करना

समस्या यह है कि PATCHpath एस पहुंच योग्य इकाइयों को एक अलग अंतराल से अद्यतन करने की अनुमति देता है। तो, मान लें कि मेरे पास comments एंडपॉइंट और article एंडपॉइंट है। प्रत्येक टिप्पणी के अपने लेख के साथ एक सहयोग है। एक उपयोगकर्ता जिसके पास कोई टिप्पणी संपादित करने की अनुमति है, उसके बाद ऐसा कुछ कर सकता है:

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

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

और इस प्रकार लेख का शीर्षक बदल गया !!

स्पष्ट रूप से यह अच्छा नहीं है।

इस मामले में, एपीआई के अन्य हिस्सों के लिए "लेख" के सहयोग से ट्रैवर्सबल होना आवश्यक है। लेकिन यह केवल पढ़ने के लिए होना चाहिए।

तो ... मैं इसे वसंत में कैसे पूरा करूं?

अनुरोध को रोकें? एक हैंडलर विधि लागू करें? खरोंच से अपना खुद का नियंत्रक लिखें?

धन्यवाद!

उत्तर

5

लगता है कि वसंत-डेटा-आराम पर वर्तमान कार्यान्वयन बीईएल पर सीधे मूल्य लागू करने के लिए स्पेल को पथ में परिवर्तित करता है। PatchOperation (v2.5.x) देखें।

  • json-पैच के बजाय का उपयोग (साथ "application/json" या "आवेदन/मर्ज पैच + json" सामग्री प्रकार आंशिक अपडेट भेजने के लिए json-मर्ज PATCH अनुरोध:

    इन विकल्पों पर विचार करें)। यह @JsonIgnore और अन्य जैक्सन एनोटेशन का सम्मान करेगा और संगठनों का अलग-अलग व्यवहार करेगा।

  • आप कर सकते हैं अक्षम "json-पैच + json" पूरी तरह से, उदाहरण के लिए यह
  • उपयोग अनुप्रयोग स्तर एक सुरक्षा फिल्टर
  • आप हमेशा अपने कस्टम json-पैच कार्यान्वयन बना सकते हैं, अगर आप अभी भी जरूरत है जोड़कर जेपीए पर भरोसा नहीं करना, यानी केवल लिंक की गई संस्थाओं की आईडी का खुलासा करना और अपने ResourceProcessor में कस्टम लिंक प्रदान करना।

ही, यदि आप जेपीए उपयोग कर रहे हैं और Comment.article@ManyToOne साथ टिप्पणी की जाती है यकीन है कि संघ पर कोई व्यापक नहीं है कि सुनिश्चित करें। भले ही आलेख ऑब्जेक्ट पैच के साथ संशोधित किया गया हो, फिर भी यह टिप्पणी के साथ सहेजा नहीं जाएगा।

+0

अभी तक मैं आगे बढ़ गया हूं और एप्लिकेशन/जेसन-पैच + जेसन सामग्री-प्रकार के साथ पैच को संभालने के लिए एक कस्टम विधि लागू की है। और वह काम करता है। – sofend

+0

मैं जेसन-मर्ज पैच के लिए स्प्रिंग के समर्थन से अपरिचित हूं। उस पर देखेंगे। – sofend

+0

एसोसिएशन पर कोई कैस्केडिंग नहीं है, लेकिन बदलाव निश्चित रूप से जारी रहे हैं। मुझे नहीं लगता कि यह एक कैस्केड तंत्र के माध्यम से है - असल में कैस्केडिंग अवधारणा यहां भी लागू नहीं होती है। यह एसईएल के माध्यम से ऑब्जेक्ट ग्राफ में सत्र पथ से डीबी तक के ग्राफ में परिवर्तन के साथ शुद्ध पथ नेविगेशन है। – sofend

संबंधित मुद्दे