आगे बढ़ने का सबसे अच्छा तरीका मैंने पूरे दिन गुगलिंग और प्रमाणीकरण और प्रमाणीकरण को लागू करने के लिए सर्वोत्तम समाधान के साथ आने का प्रयास करके विभिन्न प्रश्नों को देखा है। मैं अब समाधान के हिस्से के साथ आया हूं, लेकिन उम्मीद है कि कोई अंतराल को भर सकता है। मुझे पता है वहाँ नीचे पाठ का एक बहुत है, लेकिन मेरे साथ सहन कृपया: ओ)जेएसएफ: प्रमाणीकरण और प्रमाणीकरण,
पृष्ठभूमि
मैं एक हिस्सा सीआरएम आवेदन पूरा जो वर्तमान में JSF 2.0, JavaEE 6, जेपीए और एक PostgreSQL का उपयोग करता है विरासत में मिली डेटाबेस। दुर्भाग्यवश, जिन लोगों ने मूल रूप से इस वेब ऐप को अपने अनंत ज्ञान में बनाना शुरू किया, उन्होंने फैसला किया कि अंत में प्रमाणीकरण/प्रमाणीकरण छोड़ना सबसे अच्छा होगा - मुझे अब इसे अंदर रखना होगा।
एप्लिकेशन अनिवार्य रूप से विभाजित है तीन परतें - विचार, प्रबंधित सेम और डीएओ। इसका मतलब यह है कि प्रबंधित सेम विशेष रूप से 'वसा' होते हैं क्योंकि उनमें सभी व्यावसायिक तर्क, सत्यापन और नेविगेशन तर्क शामिल होते हैं।
प्रमाणीकरण/प्राधिकरण आवश्यकताओं
- प्रपत्र आधारित प्रमाणीकरण, PostgreSQL डेटाबेस में संग्रहीत साख के खिलाफ मान्य।
- एकमात्र पृष्ठ जो सार्वजनिक रूप से सुलभ होगा (अज्ञात उपयोगकर्ताओं द्वारा) लॉगिन पृष्ठ होगा।
- मुझे उपयोगकर्ताओं की भूमिका के आधार पर एप्लिकेशन के कुछ क्षेत्रों तक पहुंच को रोकने की आवश्यकता है। उदाहरण के लिए, केवल 'व्यवस्थापक' भूमिका वाले उपयोगकर्ता उपयोगकर्ता पृष्ठ बनाने/संपादित करने में सक्षम होना चाहिए।
- मुझे किसी पृष्ठ के कुछ क्षेत्र तक पहुंच प्रतिबंधित करने में भी सक्षम होना चाहिए। उदाहरण के लिए, 'सेल्स रिप' भूमिका वाले उपयोगकर्ता को ग्राहक विवरण देखने में सक्षम होना चाहिए, लेकिन अगर उपयोगकर्ता की 'ग्राहक सेवा' भूमिका है तो सेव/एडिट बटन केवल तभी प्रदर्शित किया जाना चाहिए।
मैं कहाँ
पर हूँ पहली बात मैं कर रहा पर योजना इस User Authentication and Authorization using JAAS and Servlet 3.0 Login उदाहरण का अनुसरण करने के लिए है। यह मेरा मानना है कि मेरी पहली 3 आवश्यकताओं को पूरा करेगा।
पृष्ठों पर सहेजें बटन आदि को दिखाने/छुपाने के लिए, मैं this SO answer में वर्णित तकनीक का उपयोग कर सकता हूं। यह आंशिक रूप से आवश्यकता 4 को हल करेगा, हालांकि मुझे लगता है कि मुझे अभी भी एक्शन विधियों और प्रबंधित बीन्स को सुरक्षित करने की आवश्यकता है। उदाहरण के लिए, मैं ग्राहक बीन पर सहेजने() विधि में एक एनोटेशन या कुछ जोड़ने में सक्षम होना चाहता हूं ताकि यह सुनिश्चित किया जा सके कि 'ग्राहक सेवा' भूमिका वाले उपयोगकर्ता ही इसे कॉल कर सकें - यह वह जगह है जहां मैं मुद्दों में भागना शुरू करता हूं ।
मुझे लगता है कि एक विकल्प कुछ ऐसा करने के लिए होगा जो मैं दृश्य में करने का प्रस्ताव कर रहा हूं और चेहरे का उपयोग कर सकता हूं यह जांचने के लिए कि वर्तमान उपयोगकर्ता "भूमिका में है"। मैं इस पर उत्सुक नहीं हूं क्योंकि यह सिर्फ मेरे कोड को अव्यवस्थित करेगा और इसके बजाय एनोटेशन का उपयोग करेगा। अगर मैं इस मार्ग से नीचे गया तो, मैं http 403 स्थिति कैसे वापस करूँगा?
javax.annotation.security। * एनोटेशन आवेदन के क्षेत्रों में घोषणात्मक रूप से निश्चित पहुंच के लिए एक अच्छा फिट प्रतीत होता है, हालांकि जहां तक मैं समझता हूं, उन्हें केवल ईजेबी में जोड़ा जा सकता है। इसका मतलब यह होगा कि मुझे अपने सभी व्यावसायिक तर्कों को प्रबंधित बीन्स से बाहर ले जाना होगा जहां यह वर्तमान में नए ईजेबी के पास रहता है। मुझे लगता है कि व्यापारिक तर्क को अपने स्वयं के वर्गों (प्रतिनिधियों, सेवाओं या जो भी आप उन्हें कॉल करना चुनते हैं) में अलग करने का अतिरिक्त लाभ होगा।यह काफी बड़ा रिफैक्टर होगा हालांकि यूनिट टेस्ट या एकीकरण परीक्षण की कमी से सहायता प्राप्त नहीं की जा रही है। मुझे यकीन नहीं है कि एक्सेस नियंत्रण की ज़िम्मेदारी इस नए सेवा स्तर पर होनी चाहिए - मुझे लगता है कि यह प्रबंधित सेम पर होना चाहिए।
अन्य विकल्प
अपना शोध के दौरान मैं इस तरह के वसंत और सीवन के रूप में चौखटे उल्लेख बहुत से लोग मिल गया है। मेरे पास सीम के साथ कुछ सीमित अनुभव है, मुझे लगता है कि यह इस परियोजना के लिए एक अच्छा फिट होगा और मुझे याद है कि मुझे लगता है कि यह मेरे पास प्राधिकरण के मुद्दों को हल करता है, लेकिन मुझे लगता है कि इसे आज पेश करने में बहुत देर हो चुकी है ।
मैंने शिरो को विभिन्न स्थानों पर भी देखा है। 10 minute tutorial पर ध्यान देने के बाद यह एक अच्छा फिट लग रहा था, खासकर Deluan Quintao's taglib के साथ संयोजन में, लेकिन मैं किसी जेएसएफ वेब ऐप के साथ इसे एकीकृत करने के तरीके के बारे में कोई ट्यूटोरियल या उदाहरण नहीं ढूंढ पाया।
दूसरा विकल्प मैं आश्चर्यजनक रूप से नियमित रूप से आ गया हूं एक कस्टम समाधान लागू कर रहा है - यह मेरे लिए पागल लगता है!
सारांश
सारांश में तो, मैं वास्तव में क्या मैं प्रमाणीकरण और प्राधिकरण और कैसे लागू करने के मामले में सही रास्ते नीचे की ओर बढ़ रहा है पर कुछ मार्गदर्शन की तरह मैं हासिल करने व्यक्ति की कि लापता टुकड़ा ले लेंगे, जिसे विधियों और/या प्रबंधित सेम (या कम से कम कोड वे प्रतिनिधि) और/या कैसे मैं मैन्युअल रूप से एक HTTP स्थिति 403
> मैं किसी जेएसएफ वेब ऐप के साथ इसे एकीकृत करने के तरीके के बारे में कोई ट्यूटोरियल या उदाहरण नहीं ढूंढ पाया। - अभी एक है, लेकिन यह अभी भी आदर्श नहीं है: http://balusc.blogspot.com/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html –