java - 安全性:连接到JMS外部服务器Weblogic时主题无效

java - 安全性:连接到JMS外部服务器Weblogic时主题无效,第1张

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

在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. 有没有办法克服这个问题,而无需更改外部服务器中的配置?
  3. 谢谢。

    最佳答案:

    1 个答案:

    答案 0 :(得分:0)

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

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

    本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复