2013-01-31 18 views
25

मैं अपने नियंत्रक विधियों पर @PreAuthorize के साथ वसंत सुरक्षा का उपयोग कर रहा हूं। मेरा तर्क था कि मैं चाहता था कि प्रमाणीकरण एक परत में अनुमानित रूप से जांच करे, और अनुरोध में जितनी जल्दी हो सके। हालांकि, मैंने बस वसंत सुरक्षा 3 दस्तावेज पढ़ा, और देखा कि वे सेवा परत पर विधि स्तर सुरक्षा लागू करने की सलाह देते हैं (लेकिन वे क्यों नहीं कहते हैं)।क्या वसंत सुरक्षा विधि स्तर एनोटेशन नियंत्रक परत या सेवा परत पर लागू किया जाना चाहिए?

मेरा प्रश्न है: क्या वसंत सुरक्षा विधि स्तर एनोटेशन नियंत्रक परत या सेवा परत पर लागू किया जाना चाहिए? (या "दोनों", या "यह निर्भर करता है"?) अधिक महत्वपूर्ण बात: क्यों?

उत्तर

13

"यह निर्भर करता है" :)। यदि आपके आवेदन में एक सेवा परत है जिसके माध्यम से आपके सभी व्यावसायिक तर्क लागू होते हैं तो यह आमतौर पर आपकी सुरक्षा बाधाओं को लागू करने के लिए एक साफ जगह है और यह सुनिश्चित करें कि आपने किसी भी कोने के मामलों को याद नहीं किया है।

वेब कोड आम तौर पर गड़बड़ है, इसमें से अधिक है, यह अधिक तेज़ी से बदलता है और आप कई स्थानों से समान सेवा विधियों को कॉल कर सकते हैं। कोई नया नियंत्रक जोड़ सकता है और इसे ठीक से सुरक्षित करना भूल जाता है। वैकल्पिक रूप से आपके पास समान सेवाओं को कॉल करने वाले विभिन्न प्रकार के ग्राहक हो सकते हैं।

लेकिन यह इस बात पर निर्भर करता है कि आपका एप्लिकेशन किस प्रकार संरचित है और आपके उपयोग के मामले क्या हैं। आप एक कथन कर सकते हैं कि आप नियंत्रक को सुरक्षित क्यों करना चाहते हैं।

+0

धन्यवाद, आपने सेवा पर सुरक्षा डालने के लिए अच्छे तर्कों का उल्लेख किया है। नियंत्रक को सुरक्षित करने के लिए आप अच्छे तर्कों पर क्या विचार करेंगे? संदर्भ के लिए, मेरे मन में जो ऐप है, वह मूल रूप से एक नियंत्रक एंडपॉइंट पर एक सेवा विधि है, क्योंकि मेरी सेवा लेनदेन सीमाओं को परिभाषित करती है। तो एक ही सेवा विधि को केवल एक ही स्थान से बुलाया जाता है और सेवा का उपयोग करने वाले कोई अन्य ग्राहक नहीं हैं। – Jay

+0

सेवा पर प्राधिकरण डालने का एक और कारण यह है कि कौन सा सेवा किसी व्यापारिक निर्णय के लिए कौन सा सेवा एक्सेस कर सकती है, इस सवाल का सवाल है, और यह व्यवसाय तर्क के साथ स्थित हो सकता है। – Jay

+1

मेरे सिर के ऊपर से, मेरे पास एक सेवा परत की प्राथमिकता में नियंत्रक को सुरक्षित करने के लिए कोई अच्छा तर्क नहीं है। इसका मतलब यह नहीं है कि वे विशिष्ट मामलों में मौजूद नहीं हो सकते हैं। आपकी आवश्यकताएं डेटा के आधार पर नियम निर्दिष्ट कर सकती हैं जो आमतौर पर केवल वेब स्तरीय में उपलब्ध होती हैं, उदाहरण के लिए, जैसे अनुरोध शीर्षलेख। –

9

कोड पुन: उपयोग के संदर्भ में सोचें। क्या आप कहीं और अपनी सेवा का उपयोग करने जा रहे हैं? सिर्फ अपने वेब स्तर को खिलाने के लिए नहीं? हम जेएम पुलों के साथ भी हमारी सेवाओं का पुन: उपयोग करते हैं ताकि हम अपनी सेवा परत सुरक्षित कर सकें।

+1

यह ध्यान में रखने के लिए एक अच्छा मुद्दा है, धन्यवाद। इस विशेष मामले के लिए सेवा केवल वेब स्तर को खिलाने के लिए उपयोग के लिए है। – Jay

0

मुझे लगता है कि सेवा इसका उपयोग करने के लिए बेहतर जगह है।

despites some problems कि @PreAuthorizecould presentController और स्प्रिंग सुरक्षा पूछे जाने वाले प्रश्न recommends पर सेवा पर टिप्पणी के इस प्रकार डाल करने के लिए, मैं समझता हूँ कि कुछ कार्रवाई के लिए प्राधिकरण अधिक व्यापार नियम तो वेब श्रेणी के लिए एक जिम्मेदारी है।

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