【问题标题】:Security: Invalid subject while connecting to JMS External Server Weblogic安全性:连接到 JMS 外部服务器 Weblogic 时主题无效
【发布时间】:2015-07-27 10:55:01
【问题描述】:

我有一个应该在 Weblogic 10.3.5 上运行的 EJB 模块

在 Weblogic 控制台上,我已将 JMS 模块设置为指向另一个 weblogic 实例的外部服务器。在这个模块中,我有一个 jms/myQueue 和一个 jms/myConnectionFactory

在 EJB 模块中,我使用以下注释定义了一个 MDB,它可以工作(当消息出现在队列中并对其进行处理时会通知它)。

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destination", propertyValue = "jms/myQueue"), @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(
            propertyName = "connectionFactoryJndiName", propertyValue = "jms/myConnectionFactory")
    }

问题是,当我尝试使用 EJB 中的以下代码定义将消息放入同一队列的客户端时

@Stateless
public class messageSender implements messageSenderLocal {

    @Resource(mappedName="jms/myConnectionFactory")
    private ConnectionFactory connectionFactory;

    @Resource(mappedName="jms/myQueue")
    private Queue queue;

    @Override
    public void sendMessage(String msgString) {
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        MessageProducer messageProducer = session.createProducer(queue);
        Message message = session.createTextMessage();
        message.setText(msgString);
        messageProducer.send(message);
        connection.close();
    }
}

我在语句 connection.createSession(true, Session.AUTO_ACKNOWLEDGE) 处收到以下错误:

java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators]
       at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234) ~[com.bea.core.weblogic.rmi.client_1.10.0.0.jar:1.10.0.0]
       at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348) ~[com.bea.core.weblogic.rmi.client_1.10.0.0.jar:1.10.0.0]
       at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259) ~[com.bea.core.weblogic.rmi.client_1.10.0.0.jar:1.10.0.0]
       at weblogic.jms.frontend.FEConnectionFactoryImpl_1035_WLStub.connectionCreateRequest(Unknown Source) ~[weblogic.jar:10.3.5.0]
       at weblogic.jms.client.JMSConnectionFactory.setupJMSConnection(JMSConnectionFactory.java:224) ~[weblogic.jar:10.3.5.0]
       at weblogic.jms.client.JMSConnectionFactory.createConnectionInternal(JMSConnectionFactory.java:285) ~[weblogic.jar:10.3.5.0]
       at weblogic.jms.client.JMSConnectionFactory.createQueueConnection(JMSConnectionFactory.java:165) ~[weblogic.jar:10.3.5.0]
       at ...

这个错误显然与 Weblogic 上的受信任域有关,但是

  1. 为什么接收时连接会工作?
  2. 有什么办法可以在不更改外部服务器配置的情况下克服这个问题?

谢谢。

【问题讨论】:

    标签: java jms weblogic-10.x


    【解决方案1】:

    问题是:外部 JNDI 服务器不需要凭据,但我们的身份验证器自动设置当前登录的用户。

    为了避免这种行为并在外部 JNDI 服务器上强制“无用户”登录,我将字符串 java.naming.security.principal= 放在 Weblogic 控制台上外部服务器配置的 JNDI 属性 字段中。

    【讨论】:

    • 面临同样的问题.. 为“java.naming.security.principal="属性配置的值是什么?能否请您提供上述配置的分步过程。
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多