将认证别名与企业应用程序结合使用
在 WebSphere® Application Server 中运行的企业应用程序尝试创建与 IBM® MQ的 JMS 连接时,应用程序会从应用程序服务器的 Java Naming Directory Interface (JNDI) 存储库中查找 IBM MQ 消息传递提供程序连接工厂定义。
ConnectionFactory.createConnection()ConnectionFactory.createConnection(String username, String password)
如果已配置连接工厂并定义了 J2C 认证别名,那么当连接工厂用于创建连接时,认证别名中的用户名和密码可以向下流至 IBM MQ 。
连接工厂和认证别名
IBM MQ 消息传递提供程序连接工厂包含有关如何连接到 IBM MQ 队列管理器的信息。 在 WebSphere Application Server 中运行的企业应用程序可以使用连接工厂来创建与 IBM MQ的 JMS 连接。
WebSphere Application Server 将连接工厂定义存储在可使用 JNDI访问的存储库中。 创建连接工厂时,将为该连接工厂提供 JNDI 名称,以在定义该连接工厂的应用程序服务器作用域 (单元,节点或服务器作用域) 中唯一地标识该连接工厂。
例如,在 WebSphere Application Server 单元作用域定义的 IBM MQ 消息传递提供程序连接工厂包含有关如何使用 BINDINGS 传输连接到队列管理器 (myQM) 的信息。 已为此连接工厂指定了由 jms/myCF 用来唯一标识它的 JNDI 名称。
也可以将连接工厂配置为使用认证别名。 认证别名将映射到用户名和密码组合。 根据连接工厂的使用方式,创建 JMS 连接时,认证别名中的用户名和密码可能会向下流至 IBM MQ ,也可能不会向下流至。
不会执行任何检查来验证所指定的密码。 为了执行认证检查并验证用户标识和密码是否匹配,您需要编写 IBM MQ 通道安全出口。 可以在 通道安全出口程序中找到有关如何执行此操作的详细信息。
从 IBM MQ 8.0开始,队列管理器除了检查用户名外,还会检查密码。
使用连接工厂
使用 CLIENT 传输
配置为使用 CLIENT 传输的连接工厂必须指定他们要用于连接到队列管理器的 IBM MQ 服务器连接通道 (SVRCONN)。
对于已配置连接工厂使用的通道,如果 IBM MQ 通道代理程序用户标识 (MCAUSER) 属性保留为空白,那么可以将连接工厂用于直接查找或间接查找。
如果将 MCAUSER 属性设置为用户标识,那么当连接工厂用于创建与 IBM MQ的连接时,此用户标识将向下传递到 IBM MQ ,而不管企业应用程序是使用直接还是间接查找。
总结表
The following tables summarize what user identifiers are flowed down to IBM MQ when the BINDINGS transport, and the CLIENT transport, respectively are used:
| 配置 | 应用程序调用 ConnectionFactory.createConnection() |
应用程序调用 ConnectionFactory.createConnection(String username,
String password) |
|---|---|---|
| 应用程序部署描述符不包含连接工厂的资源引用 | 应用程序服务器进程的用户标识将向下流至 IBM MQ。 | 传递到 ConnectionFactory.createConnection(String username, String password) 方法中的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序部署描述符包含连接工厂的资源引用,并且 res-auth 属性设置为“Application” | 应用程序服务器进程的用户标识将向下流至 IBM MQ。 | 传递到 ConnectionFactory.createConnection(String username, String password) 方法中的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序部署描述符包含连接工厂的资源引用,并且 res-auth 属性设置为“Container” | 在连接工厂的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 | 在连接工厂的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序部署描述符包含 res-auth 属性设置为“Container”的连接工厂的资源引用,并且为应用程序配置了认证别名 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 |
| 配置 | 应用程序调用 ConnectionFactory.createConnection() |
应用程序调用 ConnectionFactory.createConnection(String username,
String password) |
|---|---|---|
| 应用程序的部署描述符不包含连接工厂的资源引用,并且连接工厂配置为使用未设置 MCAUSER 属性的 IBM MQ 通道 | 应用程序服务器进程的用户标识将向下流至 IBM MQ。 | 传递到 ConnectionFactory.createConnection(String username, String password) 方法中的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序的部署描述符不包含连接工厂的资源引用,并且连接工厂配置为使用将 MCAUSER 属性设置为用户标识的 IBM MQ 通道 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识向下流至 IBM MQ。 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 应用程序 ,并且该连接工厂配置为使用未设置 MCAUSER 属性的 IBM MQ 通道 | 应用程序服务器进程的用户标识将向下流至 IBM MQ。 | 传递到 ConnectionFactory.createConnection(String username, String password) 方法中的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 应用程序 ,并且该连接工厂配置为使用将 MCAUSER 属性设置为用户标识的 IBM MQ 通道 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 "容器 " ,并且该连接工厂配置为使用未设置 MCAUSER 属性的 IBM MQ 通道 | 在连接工厂的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 | 在连接工厂的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 "容器 " ,并且该连接工厂配置为使用将 MCAUSER 属性设置为用户标识的 IBM MQ 通道 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 "容器 " ,并且应用程序已使用认证别名进行配置,并且连接工厂已配置为使用未设置 MCAUSER 属性的 IBM MQ 通道 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 Container ,并且该应用程序已使用认证别名进行配置,并且该连接工厂已配置为使用将 MCAUSER 设置为用户标识的 IBM MQ 通道 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 |