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

Spring Boot JMS客户端ActiveMQ Artemis连接URL使用掩码密码报错如何解决

问题根因

  1. ENC(xxx)格式的密码自动解密是ActiveMQ Artemis服务端的内置能力,Artemis Java客户端默认没有启用密码掩码解密逻辑,你直接把ENC格式字符串填到连接URL中时,客户端会将整个字符串当做明文密码传递给keystore做校验,自然会报密码错误。
  2. 从报错栈可以看到你使用的客户端依赖是artemis-core-client:2.6.4,和服务端2.19.0版本跨度过大,也可能存在掩码解密逻辑不兼容的问题,建议先将客户端Artemis相关依赖版本升级到和服务端一致的2.19.0。

可行解决方案

方法1:手动解密掩码密码后配置

你可以直接调用Artemis内置的工具类先解密掩码密码,再填入连接工厂配置,示例代码如下:

import org.apache.activemq.artemis.utils.PasswordMaskingUtil;

// 先解密ENC格式的掩码密码
String encryptedPwd = "ENC(397e3aeeddf27c9783a3ab920d83e24da5b7d710df3b405f)";
String plainPwd = PasswordMaskingUtil.unmask(encryptedPwd);

// 再构造连接工厂
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(
        "(tcp://amq:61616)?" +
                "sslEnabled=true" +
                "&trustStorePath=" + trustStorePath + "&trustStorePassword=" + plainPwd
);

注意:如果你自定义过掩码加密的密钥(默认密钥为activemq),需要在客户端启动参数中添加-Dorg.apache.activemq.artemis.encryption.key=你的自定义密钥,和服务端配置保持一致。

方法2:开启客户端自动解密配置

不需要修改代码,只需要在应用启动时添加以下系统参数,客户端就会自动识别连接URL中的ENC(xxx)格式密码并完成解密:

-Dorg.apache.activemq.artemis.usemask=true

同样需要保证客户端的加密密钥配置和服务端一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:07