2013-02-12 45 views
11
  1. क्या फायदे वसंत नियंत्रक में एक पैरामीटर Principal principal के रूप में प्राचार्य और फिर सेवा परत के लिए यह हालांकि SecurityContextHolder.getContext().getAuthentication().getPrincipal() तुरंत सेवा परत में प्रिंसिपल हो रही पर पारित करने के कर रहे हैं?
  2. सेवा परत में प्रिंसिपल विवरण प्राप्त करने के लिए getAuthentication() और getPrincipal() ऑब्जेक्ट्स को हर जगह शून्य (कुछ कस्टम रैपर की तरह) की जांच किए बिना सबसे अच्छा तरीका क्या है?
+1

आपको [इस प्रश्न] के उत्तर मिल सकते हैं (http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain- वर्तमान उपयोगकर्ता नाम-i) उपयोगी। [यह उत्तर] (http://stackoverflow.com/questions/8764545/best-practice-for-getting-active-users-userdetails/8765597#8765597) भी उपयोगी हो सकता है। –

+0

क्या यह स्थैतिक विधि के साथ अमूर्त वर्ग रखने का एक अच्छा समाधान है जहां मैं 'SecurityContextHolder.getContext() डाल सकता हूं। GetA प्रमाणीकरण()। GetPrincipal()'? उसके बाद मैं इसे सेवा परत में उपयोग कर सकता हूं। – Alex

+0

मैंने जो दूसरा लिंक दिया है उसे पढ़ें। आपकी सेवाओं में उस दृष्टिकोण का उपयोग करने से रोकने के लिए कुछ भी नहीं है और यदि आप इंटरफ़ेस का उपयोग करते हैं तो आप इसे परीक्षण के लिए भी स्वैप कर सकते हैं। –

उत्तर

9
    • आपकी सेवा एपीआई का उपयोग करने और अधिक आसान हो जाएगा। आप सीधे प्रिंसिपल पर निर्भरता देखेंगे, इसलिए आप पर्यावरण में गलती से कुछ सेवा विधि नहीं कहेंगे जहां प्रिंसिपल मौजूद नहीं है।
    • स्प्रिंग सुरक्षा सुरक्षा कोड पर सामान्य कम निर्भरता में नए वसंत सुरक्षा संस्करण में माइग्रेशन के मामले में कम समस्याएं हैं।
    • आप पर्यावरण में अपनी सेवा परत का पुन: उपयोग करने में सक्षम होंगे जहां वसंत सुरक्षा मौजूद नहीं है।
  1. कुछ रैपर वर्ग तैयार करें (उदाहरण के लिए प्रमाणीकरण सेवा)। GetPrincipal() विधि जोड़ें। अपने चेक लागू करें। प्रमाणीकरण सेवा इंजेक्ट करें हर जगह सुरक्षा कॉन्टैक्टहोल्डर को सीधे कॉल के इंस्टॉलेशन।
+0

यदि मुझे विशिष्ट उपयोगकर्ता के लिए कुछ डेटा प्राप्त करने की आवश्यकता है तो मुझे लगता है कि सेवा परत में एक प्रिंसिपल (उदाहरण के लिए उपयोगकर्ता नाम) प्राप्त करना अधिक सुरक्षित है क्योंकि इस (प्रतिबंध) और डेटाबेस के बीच कम परतें हैं। इसलिए नियंत्रक में प्रिंसिपल प्राप्त करने के विरोध में यह एकमात्र दाओ छोड़ दिया गया है (बीच अतिरिक्त सेवा परत)। लेकिन दूसरी ओर, जैसा कि आपने कहा था, सेवा परत अधिक पुन: प्रयोज्य हो सकती है। तुम उसके बारे में क्या सोचते हो? – Alex

+1

एक प्रमुख वस्तु पकड़ और वेब परत द्वारा रखा जाता है। तो मेरे लिए यह प्राकृतिक लग रहा है कि एक प्रिंसिपल contoller से सेवा परत में आया था। एक और मुद्दा यह है कि स्थिर निर्भरता यूनिट परीक्षण के लिए खराब हैं: http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/। मुझे कोई सुरक्षा समस्या नहीं दिख रही है क्योंकि एक प्रमुख उदाहरण अपरिवर्तनीय है (और सामान्य रूप से पासवर्ड इस समय वास्तविक कार्यान्वयन से मिटा दिया जाएगा)। विलम्ब के लिए खेद। मैं लंबे समय से एएफके था। –

+0

विस्तारित बेस सेवा (सेवा परत में) में अपने विकल्प 2 का उपयोग करना सुरक्षित है? – Alex