Wildfly ContextService одновременная защита Identity является нулевым

Я пытаюсь отправить объект через очередь. Объект обернут в createContextualProxy ContextService. Но если я разверну объект, то securityIdentity будет нулевым. Объект является правильным прокси.

Отправитель:

@Resource(name = "DefaultContextService")
private ContextService cs;

public void sendMessage() {
    ObjectMessage objectMessage = context.createObjectMessage();
    objectMessage.setObject((Serializable) cs.createContextualProxy(<ObjectToSend>, 
            Runnable.class));            
    context.createProducer().send(queue, objectMessage);
}

Получатель:

ObjectMessage message = (ObjectMessage) msg;                
Runnable myObject = (Runnable) message.getObject();
myObject.run();

Запускаемый myObject является прокси. Но securityIdentity=null.

У кого-нибудь была эта проблема раньше?

1 ответ

Решение

Единственный способ сделать это - включить идентификатор безопасности пользователя непосредственно в объект, который вы отправляете.

Контекстная информация безопасности не сохраняется в контекстном прокси, потому что WildFly (до 15.0.1) не работает.

JMS требует, чтобы полезные нагрузки ObjectMessage были сериализуемыми. Однако объект удостоверения безопасности, сохраненный в прокси-сервере (объект org.wildfly.security.auth.server.SecurityIdentity), не является сериализуемым, поэтому он объявляется transient в реализации прокси-сервера https://github.com/wildfly/wildfly/blob/master/ee/src/main/java/org/jboss/as/ee/concurrent/IdentityAwareProxyInvocationHandler.java.

Следовательно, он не выдерживает последующего процесса сериализации / десериализации сообщений JMS.

Существует старая проблема WildFly, которая была закрыта, но я знаю, что реализация безопасности была полностью заменена с тех пор...

Другие вопросы по тегам