You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM MQ用户认证失效:配置未校验用户名且报2035未授权错误

IBM MQ连接2035未授权错误排查与修复

问题描述

配置Spring+Camel连接IBM MQ的XML后,系统未校验指定用户名,同时抛出错误:

IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED')

原配置代码:

<bean id="mq01" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="jmsConfiguratione0l" />
</bean>

<bean id="jmsConfiguration01" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="credentialsConnectionFactory01"/>
    <property name="username" value="userid" /> 
    <property name="password" value="userid" />
    <property name="testConnectionOnStartup" value="true" /> 
    <property name="concurrentConsumers" value="5" />
</bean>

<bean id="credentialsConnectionFactory01" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jndiFactoryBean01" /> 
    <property name="username" value="userid" /> 
    <property name="password" value="userid" />
</bean>

<bean id="jndiFactoryBean01" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate01"/> 
    <property name="jndiName" value="mq1"/>
</bean>

<bean id="jndiTemplate01" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop> 
            <prop key="java.naming.provider.url">${binding.url}</prop>
            <prop key="java.naming.security.authentication">simple</prop> 
            <prop key="java.naming.security.principal">userid</prop> 
            <prop key="java.naming.security.credentials">userid</prop>
        </props>
    </property>
</bean>

问题原因

  1. 配置引用拼写错误:JmsComponent中引用的jmsConfiguratione0l是拼写错误,实际正确的bean ID是jmsConfiguration01,导致Camel组件未加载到正确的JMS配置。
  2. 多层认证配置冲突:同时在JmsConfiguration、UserCredentialsConnectionFactoryAdapter、JndiTemplate中配置了用户名密码,可能导致认证信息传递混乱,MQ服务器无法获取正确的校验凭证。
  3. MQ端权限不足:指定的userid未被授予连接队列管理器、访问目标队列的权限。

修复方案

1. 修正配置引用错误

将JmsComponent中的ref值改为正确的jmsConfiguration01。

2. 统一认证配置

保留UserCredentialsConnectionFactoryAdapter的用户名密码配置,移除JmsConfiguration和JndiTemplate中的重复认证参数,避免冲突。

3. 配置MQ端权限

登录IBM MQ控制台,给userid授予以下权限:

  • 连接队列管理器的CONNECT权限
  • 访问目标队列的PUT/GET权限(根据业务需求)
  • 测试环境可临时加入mqm用户组,生产环境遵循最小权限原则

修正后的配置示例

<bean id="mq01" class="org.apache.camel.component.jms.JmsComponent">
    <property name="configuration" ref="jmsConfiguration01" />
</bean>

<bean id="jmsConfiguration01" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="credentialsConnectionFactory01"/>
    <property name="testConnectionOnStartup" value="true" /> 
    <property name="concurrentConsumers" value="5" />
</bean>

<bean id="credentialsConnectionFactory01" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jndiFactoryBean01" /> 
    <property name="username" value="userid" /> 
    <property name="password" value="userid" />
</bean>

<bean id="jndiFactoryBean01" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate01"/> 
    <property name="jndiName" value="mq1"/>
</bean>

<bean id="jndiTemplate01" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop> 
            <prop key="java.naming.provider.url">${binding.url}</prop>
            <prop key="java.naming.security.authentication">simple</prop>
        </props>
    </property>
</bean>

内容的提问来源于stack exchange,提问作者DummyGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:50:44