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

配置集群连接后ActiveMQ Artemis自定义SecurityManager的authenticate方法未触发

问题:ActiveMQ Artemis集群配置后自定义SecurityManager的authenticate方法未触发但认证仍成功

我通过实现ActiveMQSecurityManager5接口在ActiveMQ Artemis中自定义了SecurityManager,用密码字段传递JWT Token实现客户端认证。未配置集群连接时认证功能正常,但配置集群连接后,自定义类重写的authenticate方法没被调用(artemis.log里看不到该方法的日志,但init方法日志正常)。奇怪的是用合法用户名密码时认证依然成功,这和我认为authenticate没被调用的假设矛盾,请问还需要做哪些配置?

自定义authenticate方法代码

@Override
public Subject authenticate(String user, String password, RemotingConnection remotingConnection, String securityDomain) throws NoCacheLoginException 
{
    logger.info("authenticate(" + user + ", " + password + ", " + remotingConnection.getRemoteAddress() + ", " + securityDomain + ")");
    Subject sub = null;
     
    try
    {
        sub = activeMQJAASSecurityManager.authenticate(user, password, remotingConnection, securityDomain);
    }
    catch(Exception ex)
    {
        logger.info(ex.getLocalizedMessage());
        logger.info("EXCEPTION IN NORMAL AUTH");
    }
    logger.info("sub is:"+sub);
     
    if(sub == null)
    {
        boolean isValid = false;
        try 
        {
            isValid = IsValidJWTToken(password);
        }
        catch(Exception e)
        {
            logger.info("JWT Authentication Failed");
            logger.error(e.getStackTrace().toString());
        }
        if(isValid == true)
        {
            try
            {
                logger.info("validUser is : "+validUser);
                logger.info("validPassword is : "+validPassword);
                sub = activeMQJAASSecurityManager.authenticate(validUser, validPassword, remotingConnection, securityDomain);
            }
            catch(Exception ex)
            {
                logger.info("Second JAAS Authentication Failed");
            }
        }
    }
    return sub;
}

解决方案建议

  • 检查集群连接的安全配置:集群间连接默认可能使用单独安全域或绕过自定义SecurityManager。确保broker.xml中cluster-connection节点的security-domain与客户端使用的一致,且未配置allow-null-authentication="true"这类跳过认证的参数。

  • 确认SecurityManager全局生效:集群连接可能使用了内置JAAS认证而非自定义实现。检查broker.xml中security-manager配置是否全局生效,避免集群连接相关配置单独指定其他SecurityManager或JAAS域。

  • 排查集群节点信任机制:ActiveMQ Artemis集群节点间默认可能启用信任模式,节点间连接直接通过认证,不走客户端认证流程。此时客户端认证成功可能是节点同步了认证状态,而非自定义authenticate方法被调用。可尝试配置cluster-connection的trust-all="false",并确保集群连接凭据通过自定义认证逻辑。

  • 验证自定义SecurityManager的节点一致性:确保所有集群节点都正确加载了自定义类和配置,避免部分节点未使用自定义实现导致认证不一致。

  • 检查JAAS配置覆盖问题:如果自定义SecurityManager依赖JAAS(代码中调用了activeMQJAASSecurityManager.authenticate),集群配置可能覆盖JAAS域,导致直接走原生JAAS认证而非自定义逻辑。需确保JAAS配置在集群环境下一致,且自定义SecurityManager优先级高于默认JAAS认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:27:22