Как распространить тему 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
Конечно, я пропустил какое-то магическое заклинание. Ты знаешь какой?