如何仅在ConnectionFactory上使用Java JMS身份验证

时间:2018-12-05 16:54:14

标签: java jms

我目前正在部署REST应用程序以将消息发布到JMS,但是为了通过QueueConnectionFactory进行连接,我们正在创建上下文,但是我们想使用在Webpshere和JMS层上定义的用户名和密码,绕过身份验证在Java代码中用于createContext()。

一旦在JMS上连接了用户名和密码,我就不想在Java代码上通过身份验证。

下面是使用的代码:

JArray array = JArray.FromObject(people);

JObject result = new JObject(
    new JProperty("People", 
        new JArray(array.Children<JObject>()
            .Select(jo => 
                new JObject(
                    new JProperty("PersonId", jo["PersonId"]),
                    new JProperty("PersonFields", 
                        new JArray(jo.Descendants()
                            .OfType<JProperty>()
                            .Where(jp => jp.Name != "PersonId" && jp.Value is JValue)
                            .Select(jp => 
                                new JObject(
                                    new JProperty("Description", jp.Name),
                                    new JProperty("Value", jp.Value)
                                )
                            )
                        )
                    )
                )
            )
        )
    )
);

string json = result.ToString();

程序运行时,我们在日志中获得以下sysout:

  

[12/4/18 22:00:31:170 BRST] 0000017d SibMessage W
  [BAP_BUS:productionbackupNode01.server1-BAP_BUS] CWSII0212W:总线   BAP_BUS拒绝匿名用户访问总线。 [12/4/18   22:00:31:249 BRST] 0000017d SystemOut O <<< ---   AutosysExecProvider.putRequestInJMSQueue方法。

我在Webps上使用WAS路径设置了用户名和密码: 资源\ JMS \连接工厂\新建

1 个答案:

答案 0 :(得分:0)

好消息,使用下面的注释并更改了通过JMS发布消息的方法后,问题已解决:

@Resource(lookup = "jms/bapssdEE/autosysCF")
ConnectionFactory connectionFactory;

@Resource(lookup = "jms/bapssdEE/autosysQ")
Queue demoQueue;

private void putRequestInJMSQueue(String envelope) {
try (JMSContext context = connectionFactory.createContext();){
context.createProducer().send(demoQueue, envelope);

同样重要的是,我们只是在Webps上的Mapping-configuraiton别名字段中定义了创建的用户,然后将消息发布到JMS,而没有在代码上公开用户名和密码。