2010-02-09 13 views
11

पर गतिशील भूमिकाएं मैं एक समर्पित अनुप्रयोग में उपयोगकर्ता और भूमिकाओं को प्रबंधित करना चाहता हूं। उदाहरण के लिए इस एप्लिकेशन का उपयोगकर्ता ("ग्राहक एक्स बॉस") एक नई भूमिका "ग्राहक एक्स कर्मचारी" बना सकता है। यदि कोई कर्मचारी जावा ईई एप्लिकेशन सर्वर (ग्लासफ़िश 3) तक पहुंचता है तो उसे "ग्राहकएक्स कर्मचारी" भूमिका मिलनी चाहिए।जावा ईई सर्वर

यह आसान लगता है, लेकिन यह जावा ईई द्वारा समर्थित नहीं है, क्योंकि समूह स्टार्ट-अप समय पर भूमिकाओं के लिए मैप किए जाते हैं और एप्लिकेशन के भीतर भूमिकाएं स्थिर होती हैं।

जावा ईई (6) पर्यावरण में रनटाइम पर उपयोगकर्ता भूमिकाओं को प्रबंधित करने का सबसे अच्छा तरीका क्या है?

+2

मैंने इस उपयोग के मामले में (दूसरों के बीच) के समर्थन में https://java.net/jira/browse/JAVAEE_SPEC-20 बनाया है। यदि आप या किसी और को अभी भी जावा ईई भूमिकाओं में गतिशीलता की कमी से परेशान है, तो कृपया इसके लिए वोट दें या कोई टिप्पणी छोड़ दें। –

उत्तर

11

जावा ईई में घोषणात्मक सुरक्षा वास्तव में ऐसी आवश्यकताओं के लिए उपयुक्त नहीं है। सुरक्षा की समस्या दो में विभाजित किया जा सकता है:

  • प्रमाणीकरण
  • प्राधिकरण

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

दरअसल, यहां तक ​​कि भूमिकाओं कि लोड और प्रिंसिपल (वेब ​​के लिए isUserInRole और isCallerInRole EJB के लिए) से संबद्ध किया जाएगा web.xml या ejb.xml जो पर्याप्त लचीलापन प्रदान नहीं करता है में निर्दिष्ट किया जाना चाहिए। तब हमने एलडीएपी या एक्टिव डायरेक्टरी से मैन्युअल रूप से भूमिका निभाई थी (प्रिंसिपल के अनुसार)। फिर हमने सुरक्षा जांच करने के लिए ईजेबी 3 इंटरसेप्टर और सर्वलेट फ़िल्टर का इस्तेमाल किया।

हालांकि मैं दृढ़ता से एक भूमिका आधारित अभिगम नियंत्रण (आरबीएसी) से चिपकने का सुझाव देता हूं और कुछ और फैंसी लागू नहीं करता हूं। ऐसे कई ढांचे हैं जो घर से बना आरबीएसी से निपटने में मदद कर सकते हैं।

हमने JSecurity और Acegi Security पर भी एक नज़र डाली और वे दिलचस्प लग रहे थे।

+0

आपके उत्तर के लिए धन्यवाद, खासतौर पर संकेत के लिए कि गतिशील रूप से भूमिकाओं को सेट करने के लिए वेब.xml या ejb.xml में स्थिर रूप से घोषित किया जाना चाहिए! यह मेरे लिए अगला पछतावा होता। मैं JSecurity एक स्प्रिंग सिक्योरिटी (एसीगी के उत्तराधिकारी) की जांच करूंगा http://static.springsource.org/spring-security/site/index.html। – deamon

+1

JSecurity अब "शिरो" कहा जाता है। http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

हां, ' 'या' @ DeclaredRoles' के साथ घोषित भूमिकाएं वास्तव में प्रतीकात्मक नाम हैं जिन्हें बाहरी निर्देशिका में भूमिका में मैप किया जाना चाहिए (उदाहरण के लिए एलडीएपी) '<सुरक्षा-भूमिका-मानचित्रण>' का उपयोग कर। यदि मैपिंग 1-टू-1 है, तो ग्लासफ़िश में "रोल मैपिंग के लिए डिफ़ॉल्ट प्रिंसिपल" विकल्प है, लेकिन यह समाधान का केवल आधा है और आपको अभी भी कहीं भी भूमिका निभानी होगी। – ewernli