【问题标题】:JMS Topic with authentication for subscribers on Glassfish在 Glassfish 上为订阅者提供身份验证的 JMS 主题
【发布时间】:2014-01-21 05:57:26
【问题描述】:

我在 Glassfish 服务器上配置了一个 JMS 主题,并且我实现了一个客户端来订阅主题并打印它接收到的消息。这工作正常。

这是我的客户。您可以看到我选择使用一种“直接连接”而不是使用 JNDI 查找。

com.sun.messaging.ConnectionFactory connFactory = new com.sun.messaging.ConnectionFactory();
connFactory.setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList, "mq://localhost:7676/");
TopicConnection connection = connFactory.createTopicConnection();
TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("myTopic");
TopicSubscriber subscriber = session.createSubscriber(topic);
subscriber.setMessageListener(this);
connection.start();

这样任何客户都可以订阅我的主题。我现在想要的是找到一种方法来强制客户端在开始接收消息之前进行身份验证。 Glassfish 有可能吗?

到目前为止,我已经尝试在 Glassfish 管理页面上更改“默认 JMS 主机”凭据并传递我在创建连接时设置的新凭据:

TopicConnection connection = connFactory.createTopicConnection("myuser", "mypass");

但这没有用。如果我通过默认凭据,它就可以工作:

TopicConnection connection = connFactory.createTopicConnection("admin", "admin");

我想我必须在其他地方更改凭据,但我不知道在哪里。而且即使有效,也会强制客户端进行身份验证?我的意思是,如果没有凭据,我的客户就没有其他方法可以订阅我的主题了吗?

【问题讨论】:

    标签: java authentication glassfish jms-topic


    【解决方案1】:

    简答:

    1 - 在 imqbroker 上创建一个用户 (glassfish3\mq\bin\imqusermgr.exe)。

    2 - 编辑 accesscontrol.properties 文件 (myDomain\imq\instances\imqbroker\etc) 并设置哪个用户可以使用哪个主题。

    长答案:

    1 - 通过命令提示符执行:

    \glassfish3\mq\bin\imqusermgr add -varhome c:\glassfish3\glassfish\domains\myDomain\imq -u myuser -p mypass

    这将在 varhome 指示的 imqbroker 上创建一个用户,该用户具有特定的用户名和密码。

    2 - 在 accesscontrol.properties 文件 (myDomain\imq\instances\imqbroker\etc) 中,将 destination based access control 部分编辑为类似内容:

    topic.myTopic.consume.allow.user=myUser
    topic.myTopic.consume.deny.user=*
    topic.*.consume.allow.user=*

    这将允许myUser 使用myTopic 并拒绝其他用户。您拥有的其余主题将继续允许所有用户使用它们。请注意,topic.*.consume.allow.user=* 不会替换 topic.myTopic.consume.deny.user=*

    我的代码保持不变:

    TopicConnection conn = connectionFactory.createTopicConnection("myuser", "mypass");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2018-08-14
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2019-04-23
      相关资源
      最近更新 更多