Como propagar o assunto do JAAS ao chamar um EJB remoto (RMI sobre IIOP) de um cliente puro

Eu estou testando a propagação deAssunto JAAS com umchefe personalizado de um cliente EJB independente executado em um tempo de execução Java bruto para um servidor JavaEE. Estou direcionando as implementações do JBoss e do WebSphere.

De acordo comeste tópico do fórum Eu esperava que funcionasse com o JBoss facilmente.

Aqui está o meu snippet de código de código do cliente 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);

O código do lado do servidor é:

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

Para ter certeza, mesmo que seja o comportamento padrão, eu adicionei esta seção ao meuejb-jar.xml bean de sessão:

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

Meu bean de sessão não está protegido por nenhuma função.

De acordo comesta seção do infocenter do IBM WebSphereTambém habilitei a propriedade do sistemacom.ibm.CSI.rmiOutboundPropagationEnabled=true.

Tecnicamente falando, a chamada de serviço funciona corretamente no JBoss ou no WebSphere. Mas o Assunto do JAAS, incluindo meu principal personalizado criado no cliente, não é propagado para o servidor. Ou claro, oSubject descartado logo antes da criação do contexto JNDI e da chamada EJB está OK.

Eu executo a mesma versão de tempo de execução Java para servidor e cliente (IBM Java6 SR9 FP2 ...),MyPrincipal classe serializável está disponível no servidor ClassPath (AppServer/lib/ext para o WebSphere,server/default/lib para o JBoss)

Dumps do 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

Despejos JBoss:

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

Com certeza, perdi algum tipo de feitiço. Você conhece qual deles ?

questionAnswers(2)

yourAnswerToTheQuestion