2009-06-14 15 views
6

मैं वर्तमान में FORM पर आधारित उपयोगकर्ताओं का उपयोग करने के लिए ग्लासफ़िश v2.1 में प्रमाणीकरण का उपयोग कर रहा हूं और यह ठीक काम करता है। मैं ProgrammaticLogin पर स्विच करना चाहता हूं और मैं प्रारंभिक रूप से अनुरोधित यूआरएल (यानी लॉगिन पेज पर रीडायरेक्ट करने से पहले) प्राप्त करने में सक्षम होना चाहता हूं और इसे अपने प्रोग्रामैटिक लॉगिन कोड में उपयोग करना चाहता हूं ताकि उपयोगकर्ता प्रमाणीकरण के बाद अनुरोधित पृष्ठ पर रीडायरेक्ट हो सके।ग्लासफ़िश में j_security_check को ओवरराइड कैसे करें?

मैं j_security_check के लिए स्रोत कोड देखा है - मेरे मामले कि FormAuthenticator (Catalina codebase) में है और यह सत्र में एक SavedRequest वस्तु में प्रारंभिक अनुरोध बचाता है, बल्कि यह है कि सत्र एक StandardSession बल्कि HttpSession से वहाँ कोई सीधा रास्ता है, इसलिए है इसे एक्सेस करने के लिए।

या मुझे FORM से प्रमाणीकरण तंत्र को और कुछ और बदलना चाहिए?

धन्यवाद!

उत्तर

8

ठीक है, मुझे जवाब मिला। तो यहां यह है:

मूल रूप से जो मैं प्राप्त करने की कोशिश कर रहा था वह ग्लासफ़िश में एक ओपनिड-आधारित प्रमाणीकरण तंत्र को लागू करना था। ऐसा करने का एक तरीका ProgrammaticLogin का उपयोग करना है, लेकिन इसमें कुछ कमियां हैं - अनुरोधित यूआरएल और प्रोग्रामेटिक ऑथ पर रीडायरेक्ट करने का कोई आसान तरीका प्रोग्रामर के लिए अधिक काम नहीं है। तो चारों ओर पढ़ने के बाद मुझे अपने लक्ष्य को प्राप्त करने का बेहतर तरीका मिला - सर्वर प्रमाणीकरण मॉड्यूल या सैम। यह JSR-196 में वर्णित मानक प्रक्रिया का हिस्सा है और ग्लासफ़िश के लिए प्लग करने योग्य ऑथ मॉड्यूल बनाने का एक तरीका प्रदान करता है (यानी मानक FORM, BASIC आदि से अलग)। यह घोषणा आपको अपने घोषणात्मक सुरक्षा मॉडल को रखते हुए सर्वलेट कंटेनर में नए ऑथ मॉड्यूल को प्लग करने की अनुमति देती है।

तो मुझे बस अपना खुद का कस्टम सैम लिखना है। यहाँ एक त्वरित कैसे-:

  1. ServerAuthModule इंटरफ़ेस है जो ज्यादातर निम्न विधि करने पर निर्भर करता लागू:

    AuthStatus validateRequest(MessageInfo messageInfo, security.auth.Subject clientSubject, security.auth.Subject serviceSubject) throws AuthException

  2. पैकेज एक जार में अपने सैम, और अपनी जार जगह ग्लासफ़िश lib निर्देशिका।

  3. अपने आवेदन के साथ उपयोग के लिए एसएएम कॉन्फ़िगर करें। यह 2 चरणों में किया जाता है:

    • डोमेन.एक्सएमएल में संदेश-सुरक्षा-प्रदाता के रूप में अपने एसएएम को परिभाषित करें।
    • अपने आवेदन के साथ उपयोग के लिए एसएएम बांधें। आप अपने ऐप के सूर्य-वेब-एप.एक्सएमएल में httpservlet-security-provider विशेषता को परिभाषित करके ऐसा कर सकते हैं। चरण 1 में आपके SAM को असाइन किए गए नाम पर विशेषता का मान सेट करें।

अधिक जानकारी के लिए पढ़ने के this great tutorial by Ron Monzillo.

अद्यतन: इस समस्या AuthenticRoast कहा जाता है के लिए एक सरल और अधिक सुरुचिपूर्ण समाधान नहीं है। यह एक जावा लाइब्रेरी है जो एइक सोमर द्वारा लिखी गई है जो आपको अपने स्वयं के प्लग करने योग्य प्रमाणीकरण लिखने की अनुमति देती है।

1

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

+0

धन्यवाद! मैंने सुरक्षाफिल्टर को देखा है लेकिन फिर मुझे ग्लासफ़िश के साफ घोषणात्मक सुरक्षा मॉडल पर चिपके हुए अपने लक्ष्य को हासिल करने का एक बेहतर तरीका मिला। – albogdano

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