Weitergabe des JAAS-Betreffs beim Aufrufen eines Remote-EJB (RMI über IIOP) von einem reinen Client

Ich teste die Ausbreitung vonJAAS Betreff mit einerbenutzerdefinierte Principal von einem eigenständigen EJB-Client, der auf einer unformatierten Java-Laufzeit ausgeführt wird, zu einem JavaEE-Server. Ich beziehe mich sowohl auf JBoss- als auch auf WebSphere-Implementierungen.

Gemäßdieser Forenthread Ich habe erwartet, dass es mit JBoss problemlos funktionieren würde.

Hier ist mein EJB-Client-Code-Code-Snippet:

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);

Der serverseitige Code lautet:

public String getNewMessage(String msg) {
    System.out.println("getNewMessage principal: " + sessionContext.getCallerPrincipal());
    System.out.println("Current Subject: " + Subject.getSubject(AccessController.getContext()));
    return "getNewMessage: " + msg;
}

Um sicherzugehen, auch wenn es das Standardverhalten ist, habe ich diesen Abschnitt zu meinem hinzugefügtejb-jar.xml Session Bean:

<security-identity>
   <use-caller-identity/>
</security-identity>

Mein Session Bean ist durch keine Rolle geschützt.

Gemäßdieser Abschnitt zum IBM WebSphere-InfocenterIch habe auch die Systemeigenschaft aktiviertcom.ibm.CSI.rmiOutboundPropagationEnabled=true.

Technisch gesehen funktioniert der Serviceabruf unter JBoss oder WebSphere einwandfrei. Der JAAS-Betreff einschließlich meines auf dem Client erstellten benutzerdefinierten Principals wird jedoch nicht auf den Server übertragen. Oder natürlich dieSubject Dump direkt vor der JNDI-Kontexterstellung und dem EJB-Aufruf ist OK.

Ich verwende dieselbe Java-Laufzeitversion für Server und Client (IBM Java6 SR9 FP2 ...).MyPrincipal serialisierbare Klasse ist in Server ClassPath verfügbar (AppServer/lib/ext für WebSphereserver/default/lib für JBoss)

WebSphere-Dumps:

[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-Dumps:

 12:30:20,540 INFO  [STDOUT] getNewMessage principal: anonymous
 12:30:20,540 INFO  [STDOUT] Current Subject: null

Natürlich habe ich einen Zauberspruch verpasst. Weißt du welches?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage