java - Wildfly ContextService 并发 securityIdentity 为空
问题描述
我正在尝试通过队列发送对象。该对象被包装在 ContextService 的 createContextualProxy 中。但如果我打开对象,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。
以前有人遇到过这个问题吗?
解决方案
这样做的唯一方法是将用户的安全身份直接合并到您发送的对象中。
安全上下文信息不会保留在上下文代理中,因为 WildFly(最高 15.0.1)已损坏。
JMS 要求 ObjectMessage 有效负载是可序列化的。然而,代理中保留的安全身份对象(一个org.wildfly.security.auth.server.SecurityIdentity对象)不是可序列化的,因此它transient
在org.jboss.as.ee.concurrent.IdentityAwareProxyInvocationHandler代理实现中声明。
因此,它无法在后续的 JMS 消息序列化/反序列化过程中继续存在。
有一个旧的WildFly 问题已关闭,但我知道从那时起安全实施已被完全替换......
推荐阅读
- oracle - 在 Oracle 中使用 REGEXP_LIKE
- javascript - 为什么instanceof返回false?
- c# - 如何在 c# 中使用来自 typescript 的窗口形式的函数?
- xaml - 如何在 xamarin 表单的搜索栏中隐藏搜索图标
- mongodb - 使用 updateMany 在 mongoose 中返回更新的模型?
- android - 我可以使用 onesignal 自动触发变更单状态吗?
- python - AttributeError:“InputLayer”对象没有属性“W”
- java - JCEf 未在 Eclipse 中在 MAC 上启动
- javascript - 在textarea中添加多个图像,svg
- python - 设计通知系统数据库的正确方法是什么?