दिलचस्प पोस्ट
पूरे दस्तावेज़ में एक निश्चित प्रकार के प्रथम / nth तत्व का मिलान करना सी – निर्धारित करें कि कोई संख्या प्रधान है या नहीं जावास्क्रिप्ट में एक तारीख को बढ़ाना MVC5 – DropDownListFor एचटीएमएल सहायक में "selectedValue" कैसे सेट करें जावास्क्रिप्ट में कॉलर फ़ंक्शन को कैसे पता चलेगा? व्युत्पन्न कक्षाओं में कार्य के लिए C ++ "आभासी" कीवर्ड क्या ये ज़रूरी हैं? "आर को एक चर में हल नहीं किया जा सकता"? डाटा बाध्यकारी गतिशील डेटा एंड्रॉइड में पगनेटिंग टेक्स्ट मुझे PHP में templating सिस्टम का उपयोग क्यों करना चाहिए? मॉडल में वर्तमान_उज़र एक्सेस करें समतल / अन-फ्लैटेन नेस्टेड जेएसएएन ऑब्जेक्ट्स को फ्लैटन करने का सबसे तेज़ तरीका पृष्ठभूमि कार्य से iOS 7 में स्थान प्रबंधक प्रारंभ करें JQuery.ajax सफलता डेटा से JSON पार्स करें उत्तरदायी क्षैतिज पृष्ठ फिसलने

डेटाबेस में उपयोगकर्ताओं के साथ प्रमाणीकरण / प्राधिकरण कैसे संभालना है?

वर्तमान में, मैं जेएसएफ 2.0, टॉमकैट 7 और मोंगोडीबी का उपयोग कर एक वेब प्रोजेक्ट पर काम कर रहा हूं। मेरे पास एक बड़ा सवाल है कि कैसे सत्र प्रबंधन और प्रमाणीकरण / एक डेटाबेस में उपयोगकर्ताओं के साथ प्राधिकरण को संभालना है।

मैं चाहता हूं कि संरचना निम्नानुसार है: केवल लॉग इन उपयोगकर्ता ही इवेंट बना सकते हैं और हर कोई निर्मित ईवेंट देख सकता है।

  • create.xhtml -> केवल लॉग इन उपयोगकर्ताओं के लिए।
  • events.xhtml -> सभी के लिए सार्वजनिक

बुनियादी संरचना मैं योजना बना रहा हूं:

  • जांचें कि पेज को उपयोगकर्ता में लॉग इन करने की आवश्यकता है (उदाहरण के लिए create.xhtml )
  • यदि हां, तो जांचें कि उपयोगकर्ता लॉगिन है या नहीं
  • यदि उपयोगकर्ता लॉग इन नहीं है, तो login.xhtml पर login.xhtml
  • यदि सफलतापूर्वक लॉग इन किया गया है, तो अनुरोधित पृष्ठ पर वापस आएं
  • जब तक उपयोगकर्ता लॉग आउट बटन क्लिक नहीं करते, तब तक "उपयोगकर्ता लॉग इन किया गया" जानकारी रखें। (वहां मुझे लगता है कि @SessionScoped को खेलने में @SessionScoped जाता है)

प्रश्न है:

  1. ऐसा करने का कम जटिल तरीका क्या है?
  2. मैं @SessionScoped एनोटेशन का उपयोग कहाँ करना चाहिए? Create.java या LoginManager.java ?
  3. स्प्रिंग सुरक्षा मेरी समस्या के लिए जटिल लगती है, क्या मुझे इसकी ज़रूरत है? यदि हां, तो आप थोड़ा समझ सकते हैं कि कैसे कार्यान्वयन जेएसएफ 2.0 और मोंगो डीबी के साथ मिलकर काम करता है?

वेब के समाधान से एकत्रित समाधान "डेटाबेस में उपयोगकर्ताओं के साथ प्रमाणीकरण / प्राधिकरण कैसे संभालना है?"

कई विकल्प हैं चुनने के लिए कौन सी पूरी तरह आप पर निर्भर है निष्पक्ष रूप से कंक्रीट के फायदे और नुकसान का वजन आपकी स्थिति का अनुरूप है।


1. जावा ई से कंटेनर प्रबंधित प्रमाणीकरण प्रदान करें

बस web.xml में एक <security-constraint> घोषित करें जो एक सुरक्षा क्षेत्र को संदर्भित करता है जो सर्वलेट कंटेनर में कॉन्फ़िगर किया गया है। आप अपने वेबएप को यूआरएल पैटर्न निर्दिष्ट कर सकते हैं, जो लॉगिन और / या भूमिका (नों), जैसे /secured/* , /app/* , /private/* आदि के लिए जाँच की जानी चाहिए।

जावा EE 8 से पहले, आपको दुर्भाग्यवश अभी भी सर्वलेट कंटेनर-विशिष्ट तरीके से एक सुरक्षा वास्तविक को कॉन्फ़िगर करने की आवश्यकता होती है। यह सामान्यतः सर्वलेटकोनियर-विशिष्ट दस्तावेज़ में वर्णित है टोमक 8 के मामले में, यह है कि दायरा एचओ-टू कैसे है उदाहरण के लिए, उपयोगकर्ता / भूमिकाओं के आधार पर एक डाटाबेस आधारित रीयलएम अनुभाग "जेडीबीसीआरएलम" में वर्णित है।

जावा ईई 8 के बाद से, अंततः JSR-375 पर आधारित एक मानक एपीआई होगी।

लाभ:

  • अपेक्षाकृत तेज और आसान सेटअप और उपयोग
  • जावा ईई 8 के बाद से अंत में एक मजबूत और लचीला मानक एपीआई है।

नुकसान:

  • जावा EE 8 से पहले, क्षेत्र विन्यास कंटेनर-विशिष्ट है। जावा ईई 8 में, नए JSR-375 सुरक्षा युक्ति को हल करना चाहिए कि जेएसएपीआईसीआई की मदद से।
  • जावा EE 8 से पहले, कोई अच्छा दानेदार नियंत्रण नहीं है।
  • जावा ईई 8 से पहले, यह बहुत संयमी है; नहीं "मुझे याद", खराब त्रुटि हैंडलिंग, कोई अनुमति आधारित प्रतिबंध नहीं।

यह भी देखें:

  • J_security_check का उपयोग करके जावा ईई / जेएसएफ में उपयोगकर्ता प्रमाणीकरण करना – पूर्ण कोड उदाहरण हैं
  • जावा ईई लॉकऑफ़ आवेदन – उदाहरण वेब अनुप्रयोग (मेरे द्वारा विकसित) जो सोतेरिया (जेएसआर-375 आरआई) के साथ जावा ईई 8 प्रमाणीकरण को भी दर्शाता है।

2. एक सर्वलेट फिल्टर घर बनाने

यह बहुत अधिक सुक्ष्म नियंत्रण के लिए अनुमति देता है, लेकिन आपको अपने सभी कोड को लिखने की आवश्यकता है और आपको वास्तव में पता होना चाहिए / समझना चाहिए कि संभावित सुरक्षा छेद से बचने के लिए आपको इस तरह के एक फिल्टर को कैसे लागू करना चाहिए। JSF पक्ष में, उदाहरण के लिए आप sessionMap.put("user", user) द्वारा सत्र विशेषता के रूप में लॉग-इन उपयोगकर्ता को डाल sessionMap.put("user", user) और यदि session.getAttribute("user") null नहीं है तो फ़िल्टर में जांच करें।

लाभ:

  • ठीक अनाज नियंत्रण
  • पूरी तरह कंटेनर स्वतंत्र

नुकसान:

  • पहिया का पुनर्निर्माण; नई सुविधाओं के लिए बहुत सी कोड की आवश्यकता होती है
  • स्टार्टर के रूप में, आप कभी भी सुनिश्चित नहीं हैं कि आपका कोड 100% मजबूत है

यह भी देखें:

  • क्या प्रीप्रोसेस और रीडायरेक्ट के अनुरोधों का कोई आसान तरीका है? – प्रमाणीकरण के लिए प्रारंभिक विवरण और किकऑफ़ उदाहरण शामिल हैं
  • सत्र की समाप्ति पर अधिकृतता एक जेएसएफ फॉर्म को जमा करने पर काम नहीं करती है, पृष्ठ वही रहता है – प्रमाणीकरण के लिए अधिक विस्तारित किकॉफ़ उदाहरण शामिल है जो एजेक्स अनुरोधों को भी शामिल करता है
  • जेएसएफ: जेएसएफ में कैसे पहुंच नियंत्रण और अधिकार? – प्राधिकरण के लिए किकऑफ़ उदाहरण शामिल हैं

3. एक 3 पार्टी के फ्रेमवर्क को अनुकूलित करें

उदाहरण के लिए, अपाचे शिरो , स्प्रिंग सिक्योरिटी , इत्यादि। यह मानक कंटेनर प्रबंधित प्रमाणीकरण की तुलना में आमतौर पर बहुत अधिक ठीक गन्ना कॉन्फ़िगरेशन विकल्प प्रदान करता है और आपको अपने लिए कोई भी कोड लिखने की आवश्यकता नहीं है, लॉगिन पृष्ठ और कुछ (XML) कॉन्फ़िगरेशन की अपेक्षा बेशक।

लाभ:

  • ठीक अनाज नियंत्रण
  • पूरी तरह कंटेनर स्वतंत्र
  • पहिया का कोई पुनर्निर्माण नहीं; खुद का न्यूनतम कोड
  • बहुत सारे उपयोगकर्ताओं द्वारा अच्छी तरह से विकसित और परीक्षण किया गया है, इसलिए सबसे अधिक संभावना 100% मजबूत

नुकसान:

  • कुछ सीखने की अवस्था

यह भी देखें:

  • जेएसएफ 2 – शिरो ट्यूटोरियल – जेएसएफ 2 वेबएप में शिरो को एकीकरण करने के लिए एक विस्तृत ट्यूटोरियल