gpt4 book ai didi

java - Wildfly ContextService 并发 securityIdentity 为 null

转载 作者:行者123 更新时间:2023-11-30 05:48:56 25 4
gpt4 key购买 nike

我正在尝试通过队列发送一个对象。该对象包装在 ContextService 的 createContextualProxy 中。但如果我解开该对象,则 securityIdentity 为 null。该对象是一个正确的代理。

发件人:

@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。

以前有人遇到过这个问题吗?

最佳答案

实现此目的的唯一方法是将用户的安全身份直接合并到您发送的对象中。

安全上下文信息不会保留在上下文代理中,因为 WildFly(最高 15.0.1)已损坏。

JMS 要求 ObjectMessage 有效负载可序列化。然而,代理中保留的安全身份对象(org.wildfly.security.auth.server.SecurityIdentity 对象)不可序列化,因此它在 org.jboss.as.ee.concurrent.IdentityAwareProxyInvocationHandler 中声明为 transient 的。代理实现。

因此,它无法在后续的 JMS 消息序列化/反序列化过程中继续存在。

有一个旧的WildFly issue已关闭,但我知道从那时起安全实现已被完全替换...

关于java - Wildfly ContextService 并发 securityIdentity 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com