Jak propagować JAAS Subject podczas wywoływania zdalnego EJB (RMI przez IIOP) z czystego klienta

Testuję propagacjęJAAS Temat zniestandardowy dyrektor od samodzielnego klienta EJB działającego w środowisku wykonawczym Java w trybie surowym do serwera JavaEE. Zajmuję się implementacjami JBoss i WebSphere.

Wedługten wątek na forum Spodziewałem się, że będzie łatwo współpracować z JBoss.

Oto mój fragment kodu klienta EJB:

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

Kod po stronie serwera to:

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

Oczywiście, nawet jeśli jest to zachowanie domyślne, dodałem tę sekcję do mojegoejb-jar.xml fasola sesyjna:

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

Mój komponent bean sesji nie jest chroniony żadną rolą.

Wedługta sekcja centrum informacyjnego IBM WebSphere, Włączyłem także właściwość systemucom.ibm.CSI.rmiOutboundPropagationEnabled=true.

Technicznie rzecz biorąc, zgłoszenie serwisowe działa poprawnie na JBoss lub WebSphere. Jednak temat JAAS, w tym mój niestandardowy główny utworzony na kliencie, nie jest propagowany na serwer. Albo oczywiścieSubject zrzucony tuż przed utworzeniem kontekstu JNDI i wywołanie EJB jest OK.

Używam tej samej wersji środowiska wykonawczego Java dla serwera i klienta (IBM Java6 SR9 FP2 ...),MyPrincipal klasa serializowalna jest dostępna na serwerze ClassPath (AppServer/lib/ext dla WebSphere,server/default/lib dla JBoss)

Zrzuty 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

Zrzuty JBoss:

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

Na pewno przegapiłem jakieś zaklęcie magiczne. Czy wiesz, który?

questionAnswers(2)

yourAnswerToTheQuestion