Как распространить тему JAAS при вызове удаленного EJB (RMI поверх IIOP) с чистого клиента

Я проверяю распространениеJAAS Тема стаможенный руководитель от автономного клиента EJB, работающего в сырой среде выполнения Java, до сервера JavaEE. Я нацеливаюсь на обе реализации JBoss и WebSphere.

В соответствии сэта ветка форума Я ожидал, что это сработает с JBoss легко.

Вот мой фрагмент кода клиента 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);

Код на стороне сервера:

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

Конечно, даже если это поведение по умолчанию, я добавил этот раздел в свойejb-jar.xml сессионный компонент:

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

Мой сессионный компонент не защищен никакой ролью.

В соответствии сэтот раздел информационного центра IBM WebSphereЯ также включил системное свойствоcom.ibm.CSI.rmiOutboundPropagationEnabled=true.

Технически говоря, сервисный вызов работает должным образом либо на JBoss, либо на WebSphere. Но тема JAAS, включая мой пользовательский субъект, созданный на клиенте, не распространяется на сервер. Или, конечно,Subject сбрасывается непосредственно перед созданием контекста JNDI и вызовом EJB все в порядке.

Я запускаю одну и ту же версию среды выполнения Java для сервера и клиента (IBM Java6 SR9 FP2 ...),MyPrincipal Сериализуемый класс доступен на сервере ClassPath (AppServer/lib/ext для WebSphere,server/default/lib для JBoss)

Дампы 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

Конечно, я пропустил какое-то магическое заклинание. Ты знаешь какой?

Ответы на вопрос(2)

Ваш ответ на вопрос