在JBoss standalone.xml配置IBM MQ账号密码及解决2035授权错误
解决JBoss 7连接IBM MQ 9时的2035授权错误
遇到MQRC_NOT_AUTHORIZED(2035)错误,核心问题是IBM MQ拒绝了客户端的身份验证请求,下面是一步步的排查和解决方法:
1. 修正JBoss配置中的空格问题
先看你的资源适配器配置,注意到多个配置项的值前后带有空格,比如密码、主机名字段,这些空格会被当作配置值的一部分,尤其是密码字段,这绝对会导致身份验证失败。请把所有配置项的前后空格去掉,修正后配置如下:
<resource-adapters> <resource-adapter id="wmq.jmsra.rar"> <archive>wmq.jmsra.rar</archive> <connection-definitions> <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:/MQConnectionFactory" use-java-context="true" pool-name="MQConnectionFactory"> <config-property name="hostName">localhost</config-property> <config-property name="password">sdadsadsadasd</config-property> <config-property name="queueManager">TEST</config-property> <config-property name="port">1415</config-property> <config-property name="channel">TEST.CHANNEL</config-property> <config-property name="transportType">CLIENT</config-property> <config-property name="username">testusermq</config-property> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters>
2. 验证MQ端用户权限
即使你已经映射了用户组,也要确认testusermq用户拥有连接队列管理器TEST的必要权限:
- 打开MQ Explorer,找到队列管理器
TEST-> 权限 -> 用户和组 - 找到
testusermq(或其所属的Windows组),确保它被授予CONNECT和INQ权限 - 或者用
runmqsc命令行验证并添加权限:# 进入runmqsc环境 runmqsc TEST # 查看用户当前权限 DISPLAY AUTHREC PROFILE('TEST') PRINCIPAL('testusermq') AUTHORITY # 如果权限不足,添加必要权限 SET AUTHREC PROFILE('TEST') PRINCIPAL('testusermq') AUTHADD(CONNECT,INQ)
3. 检查通道的认证规则
MQ通道TEST.CHANNEL的配置可能会覆盖客户端传入的用户名:
- 用
runmqsc查看通道配置:
如果runmqsc TEST DISPLAY CHANNEL(TEST.CHANNEL) MCAUSERMCAUSER字段有值,MQ会用这个用户代替客户端传入的testusermq,需要确保这个MCA用户拥有相应权限,或者修改通道规则允许客户端传递自己的用户名:# 允许客户端用户连接到该通道 SET CHLAUTH('TEST.CHANNEL') TYPE(USERMAP) CLNTUSER('testusermq') USERSRC(CHANNEL) ACTION(ADD)
4. 查看MQ错误日志定位细节
MQ的错误日志会给出授权失败的具体原因,比如哪个用户被拒绝、缺少什么权限:
- 找到MQ安装目录下的错误日志,通常在
C:\Program Files\IBM\MQ\errors\AMQERR01.LOG - 搜索
2035关键词,查看对应的错误条目,里面会有更详细的信息,比如:AMQ9557E: Queue Manager User ID initialization failed for 'testusermq'.
EXPLANATION: The call to initialize the User ID 'testusermq' failed with CompCode 2 and Reason 2035.
5. 用MQ工具独立测试连接
排除JBoss的影响,用MQ自带工具测试连接:
- 使用
amqssslc(如果是SSL通道)或amqsputc工具,传入testusermq的用户名密码,连接TEST队列管理器和TEST.CHANNEL通道 - 如果工具测试也失败,说明问题在MQ端;如果工具能成功,再回头检查JBoss的资源适配器配置是否有其他问题
内容的提问来源于stack exchange,提问作者Ponmanikandan Boothalingam
相关产品推荐
相关产品推荐

