如何修改ServiceMix版本ActiveMQ Web控制台默认密码?
我之前在ServiceMix 6.x + Karaf 3.x + ActiveMQ 5.x的环境里也碰到过一模一样的问题——改了Karaf默认密码后,Karaf Web控制台正常生效,但ActiveMQ Web控制台还死守着karaf:karaf的老凭据。其实核心原因是这个版本组合里,ActiveMQ Web控制台默认没有完全复用Karaf的JAAS用户配置,哪怕主jetty.xml用了Karaf域的登录服务。下面是具体的排查和解决步骤:
问题根源
Karaf Web控制台直接绑定了karaf域的JAAS配置(读取/etc/users.properties),但ActiveMQ Web控制台的activemqweb应用自带了独立的安全配置逻辑,默认绑定的是activemq这个JAAS域,而非Karaf的域,所以你修改users.properties里的Karaf密码不会同步到这里。
解决步骤
1. 修改ActiveMQ Web控制台的Jetty配置
先找到ActiveMQ Web应用的专属Jetty配置文件:
${SERVICEMIX_HOME}/webapps/activemqweb/WEB-INF/jetty-web.xml
打开后查找<LoginService>相关的配置,如果你看到类似下面的代码:
<LoginService class="org.eclipse.jetty.plus.jaas.JAASLoginService"> <Set name="name">activemq</Set> <Set name="loginModuleName">activemq</Set> </LoginService>
把name和loginModuleName的值都改成karaf,这样它就会复用Karaf的JAAS域配置,直接读取你修改后的users.properties内容。
2. 确保用户角色匹配
ActiveMQ Web控制台需要特定角色(比如admin、user)才能访问,你要保证/etc/users.properties里的用户拥有这些角色。比如你的用户配置应该像这样:
karaf=你的新密码,admin,user
这里的admin和user要对应ActiveMQ Web控制台在web.xml里定义的安全角色,缺一不可。
3. 重启ServiceMix生效
修改完配置后,重启ServiceMix服务,再访问8181/activemqweb/index.jsp,就能用你修改后的Karaf密码登录了。
备选方案:给ActiveMQ域单独配置用户
如果你不想改动Jetty配置,也可以直接在/etc/users.properties里给activemq域添加用户,格式是:
用户名@activemq=你的新密码,admin
比如:
karaf@activemq=你的新密码,admin
这种方式也能解决登录问题,但需要维护两套用户信息,不如第一种方案优雅。
内容的提问来源于stack exchange,提问作者jalzuritro

