将认证别名与企业应用程序结合使用
在 WebSphere® Application Server 内部运行的企业应用程序尝试创建与 IBM® MQ的 JMS 连接时,该应用程序会从应用程序服务器的 Java 命名和目录接口 (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) 的信息。 系统会为该连接工厂分配 JNDI 名称 jms/myCF 以唯一标识该连接工厂。
也可以将连接工厂配置为使用认证别名。 认证别名将映射到用户名和密码组合。 根据连接工厂的使用方式,在创建 JMS 连接时,认证别名中的用户名和密码可能向下流至 IBM MQ ,也可能向下流至其他用户。
不会执行任何检查来验证所指定的密码。 为了执行认证检查并验证用户标识和密码是否匹配,您需要编写 IBM MQ 通道安全出口。 有关如何操作的详细信息,请参阅渠道安全退出程序。
从 IBM MQ 8.0开始,队列管理器除了检查用户名外,还会检查密码。
使用连接工厂
使用 CLIENT 传输
配置为使用 CLIENT 传输的连接工厂必须指定他们要用于连接到队列管理器的 IBM MQ 服务器连接通道 (SVRCONN)。
对于已配置连接工厂使用的通道,如果 IBM MQ 通道代理程序用户标识 (MCAUSER) 属性保留为空白,那么可以将连接工厂用于直接查找或间接查找。
如果将 MCAUSER 属性设置为用户标识,那么当连接工厂用于创建与 IBM MQ的连接时,此用户标识将向下传递到 IBM MQ ,而不管企业应用程序是使用直接还是间接查找。
总结表
下表总结了在使用 BINDINGS 传输和 CLIENT 传输时,分别有哪些用户标识符被下传到 IBM MQ :
| 配置 | 应用程序调用 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 属性设置为 "Container " ,并且应用程序已配置为使用认证别名,并且连接工厂配置为使用未设置 MCAUSER 属性的 IBM MQ 通道 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 | 应用程序已配置为使用的认证别名中指定的用户标识和密码将向下流至 IBM MQ。 |
| 应用程序的部署描述符包含连接工厂的资源引用,该连接工厂的 res-auth 属性设置为 Container ,并且应用程序已配置为使用认证别名,并且连接工厂配置为使用将 MCAUSER 设置为用户标识的 IBM MQ 通道 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 | 由连接工厂配置为使用的 IBM MQ 通道上的 MCAUSER 属性指定的用户标识将向下流至 IBM MQ。 |