से रिमोट ईजेबी (आईआईओपी पर आरएमआई) को कॉल करते समय जेएएएस विषय को प्रचारित करने के लिए मैं JAAS Subject के प्रचार को custom Principal के साथ एक स्टैंडअलोन ईजेबी क्लाइंट से कच्चे जावा रनटाइम पर चलने वाले जावाई सर्वर पर चल रहा हूं। मैं जेबॉस और वेबस्पियर दोनों कार्यान्वयन को लक्षित कर रहा हूं।शुद्ध क्लाइंट
this forum thread के अनुसार मुझे उम्मीद है कि यह आसानी से जेबॉस के साथ काम करेगा।
Subject subject = new Subject();
Principal myPrincipal = new MyPrincipal("me I myself");
subject.getPrincipals().add(myPrincipal);
PrivilegedExceptionAction<String> action = new PrivilegedExceptionAction<String>() {
public String run() throws Exception {
String result;
System.out.println("Current Subject: " + Subject.getSubject(AccessController.getContext()));
InitialContext ic = new InitialContext();
Business1 b = (Business1) ic.lookup("StatelessBusiness1");
result = b.getNewMessage("Hello World");
return result;
}
};
result = subject.doAs(subject, action);
System.out.println("result "+result);
सर्वर साइड कोड है::
यहाँ मेरी EJB ग्राहक कोड कोड का टुकड़ा है
public String getNewMessage(String msg) {
System.out.println("getNewMessage principal: " + sessionContext.getCallerPrincipal());
System.out.println("Current Subject: " + Subject.getSubject(AccessController.getContext()));
return "getNewMessage: " + msg;
}
यह सुनिश्चित हो, तो भी यह डिफ़ॉल्ट व्यवहार है, मैं इस खंड को शामिल किया है
<security-identity>
<use-caller-identity/>
</security-identity>
मेरे सत्र सेम एक द्वारा संरक्षित नहीं है: मेरे ejb-jar.xml
सत्र सेम करने के लिए वाई भूमिका।
this IBM WebSphere infocenter section के अनुसार, मैंने सिस्टम प्रॉपर्टी com.ibm.CSI.rmiOutboundPropagationEnabled=true
को भी सक्षम किया है।
तकनीकी रूप से सेवा कॉल बोलने से या तो जेबॉस या वेबस्पियर पर ठीक से काम करता है। लेकिन क्लाइंट पर बनाए गए मेरे कस्टम प्रिंसिपल सहित जेएएएस विषय सर्वर पर प्रचारित नहीं है। या पाठ्यक्रम, Subject
जेएनडीआई संदर्भ निर्माण से ठीक पहले डंप हो गया और ईजेबी कॉल ठीक है।
मैं सर्वर और ग्राहक (आईबीएम Java6 SR9 FP2 ...) के लिए एक ही जावा रनटाइम संस्करण चलाते हैं, MyPrincipal
serializable वर्ग सर्वर क्लासपाथ (WebSphere के लिए AppServer/lib/ext
, JBoss के लिए server/default/lib
) में उपलब्ध है
WebSphere उदासीनता:
[8/31/12 11:56:26:514 CEST] 00000024 SystemOut O getNewMessage principal: UNAUTHENTICATED
[8/31/12 11:56:26:515 CEST] 00000024 SystemOut O Current Subject: null
JBoss उदासीनता:
12:30:20,540 INFO [STDOUT] getNewMessage principal: anonymous
12:30:20,540 INFO [STDOUT] Current Subject: null
यकीन के लिए, मैं जादू रों किसी तरह चूक गए तितर। क्या आप जानते हैं कि कौन सा?
तो: के रूप में मुझे याद है, websphere JAAS फोन करने वाले विषय का प्रचार नहीं करता है, इस
यह भी देखना आईबीएम
लिए विशिष्ट है? मैंने वेबस्पेयर और टिवोली पीडी प्रिंसिपल सपोर्ट के लिए पहले ही एक कस्टम लॉगिन मॉड्यूल सफलतापूर्वक लिखा है, मैंने HTTP पर केर्बेरोज एसपीएनईजीओ को सक्षम करने के लिए जेबॉस में लॉगिन मॉड्यूल कॉन्फ़िगर किया है ... निश्चित रूप से मैं जेएएएस और अन्य सामानों के साथ सहज हूं। मैं सिर्फ पूछता हूं कि क्या मैं गलत सोच रहा हूं कि यह काम करना चाहिए ... –को सत्यापित करने के लिए जेबॉस स्रोत कोड खोलने से पहले, तो आप मुझसे अधिक अनुभवी हैं;) (मैंने लॉगिन मॉड्यूल, कस्टम प्रमाणीकरण के साथ खेला, ग्लासफ़िश में आरएमआई-IIOP/CORBA पर प्रिंसिपल अग्रेषण 2.x, और यह हमेशा बहुत जटिल रहा है। आखिरकार, हमने इसे केवल एप्लिकेशन स्तर पर ही संभाला है) मैं उपयोगकर्ता नाम/पासवर्ड प्रमाणीकरण के लिए इन मानकों का उपयोग करके किसी भी रूप में फॉर्म को हतोत्साहित करता हूं। यदि बिंदु विरेट केर्बेरोज को एकीकृत करना है और एकल साइन-ऑन प्रदान करना है, तो यह अभी भी जाने का सबसे अच्छा तरीका हो सकता है! क्षमा करें, मैं और मदद नहीं कर सकता। – ewernli
यदि तथ्य है, तो लक्ष्य हमारे विशिष्ट संदर्भ में वेबस्पियर के साथ केर्बेरोस का उपयोग करने में विफलता के आसपास काम करना है: http://stackoverflow.com/questions/10518057/how-to-enable-kerberos-authentication-for-remote-ejb- कॉल-ऑन-websphere –