का उपयोग किए बिना जावा ईई सुरक्षा भूमिकाओं को गतिशील रूप से जोड़ें I ग्लासफ़िश 3.1, बी06 का उपयोग कर जावा ईई 6 एप्लिकेशन विकसित कर रहा हूं। मेरे ऐप को सुरक्षित करने के लिए, मैं एक जेडीबीसीआरम और प्रोग्रामेटिक सुरक्षा का उपयोग कर रहा हूं। यह उपयोगकर्ता नाम और पासवर्ड की जांच करने के लिए ठीक काम करता है। लेकिन जब सुरक्षा भूमिकाओं की घोषणा की बात आती है, तो मुझे एक समस्या है:तैनाती वर्णनकर्ता
जावा ईई 6 में सुरक्षा भूमिकाओं का उपयोग करने के लिए, मुझे उन भूमिकाओं को ईजेबी परिनियोजन वर्णनकर्ता और ग्लासफ़िश-विशिष्ट परिनियोजन वर्णनकर्ता में उन भूमिकाओं को घोषित करना होगा भूमिकाएं (जैसा कि Java EE 6-tutorial में बताया गया है) अनुमतियों की जांच के लिए मैं ईजेबी के अंदर विधि isCallerInRole (स्ट्रिंग रोलरफ) का उपयोग कर सकता हूं।
यह मेरे आवेदन के लिए वांछनीय नहीं है, क्योंकि मैं चाहता हूं कि एक्सएमएल फाइलों को लिखने के बिना गतिशील और प्रोग्रामेटिक रूप से सुरक्षा भूमिकाएं जोड़ना संभव हो (और उदाहरण के लिए डेटाबेस में भूमिका नाम परिभाषित करना संभव हो)।
मैंने अभी जीएफ 3-स्रोत कोड के माध्यम से डीबग किया है और com.sun.ejb.containers.EjbContextImpl में IsCallerInRole के कार्यान्वयन को देखा है। वहाँ कंटेनर EJB वर्णनकर्ता से बाहर हो जाता है भूमिकाओं:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
मैं चारों ओर देखा और अगर मैं किसी भी तरह अपने आवेदन के अंदर EJB वर्णनकर्ता मिल सकता है, मैं इस तरह की एक भूमिका जोड़ सकता है कि पता चला:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
किसी ने ऐसा कुछ किया है, या इसके बारे में कुछ विचार हैं? क्या मेरे आवेदन के अंदर ईजेबी परिनियोजन वर्णनकर्ता का उपयोग करना संभव है? या क्या बेहतर दृष्टिकोण हैं?
पीएस या क्या मुझे भूमिका जोड़ने के लिए एमबीन का उपयोग करना चाहिए? here से काफी संबंधित पोस्ट मिला।
/**
* Tests if the caller has a given role.
*
* @param roleName - The name of the security role. The role must be one of the security roles that
* is defined in the deployment descriptor.
* @return True if the caller has the specified role.
*/
public boolean isCallerInRole(String roleName);
हालांकि, मैंने पाया है कि कम से कम JBoss के साथ के रूप में यह पहले से उन भूमिकाओं घोषित करने के लिए सभी को एक आवश्यक नहीं है:
एक तरफ के रूप में, मैं आपको ग्लासफ़िश सर्वर 3.1 के हाल के निर्माण के लिए आगे बढ़ने के लिए प्रोत्साहित करता हूं। टीम ने हाल ही में रिलीज 22. – vkraemer
धन्यवाद जारी किया। दुर्भाग्यवश, हमारे पास कुछ पुस्तकालय हैं जो उच्च ग्लासफ़िश संस्करणों को तोड़ते हैं, इसलिए हमें 06 के साथ रहना होगा जब तक कि इन libs में कई बग ठीक नहीं हैं – ifischer