ActiveMQ现在无疑成为JMS领域开源产品的龙头,基于开源框架的J2EE开发者大多用它来进行异步数据的传递工作。
比较搞的是截至ActiveMQ4.1.1版本的缺省配置仍然没有做任何的安全性配置,也就是说如果没有在软硬件防火墙层面上做限制的话,任何客户端都可以连接上JMS提供者发送和接收消息!估计大部分开发者用的都是缺省设置吧,呵呵。
当然,ActiveMQ的开发者还不至于弱智到这种程度,连最起码的权限验证都不支持。在org.apache.activemq.security包下面是提供了两种可选验证机制的:用户名/密码Map和JAAS。
无疑,基于JAAS的验证是J2EE规范之一,能实现最大的灵活性配置,不过一般情况下异步发个邮件什么的应用没有必要搞这么复杂。这里关注的是最简单的用户名/密码验证方法,就像JDBC数据源一样。
ActiveMQ服务broker是在activemq.xml中配置的,其本质上也是一个spring bean配置文件。4.0版本以后支持xbean配置方式,典型的配置文件如下:
xml 代码
- <broker brokerName="localhost" useJmx="true">
- <persistenceAdapter>
- <journaledJDBC journalLogFiles="5" dataDirectory="${webapp.root.cn.com.reachway}/WEB-INF/activemq-data"
- dataSource="#derby-ds" />
- </persistenceAdapter>
-
- <transportConnectors>
- <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default" />
- </transportConnectors>
-
- <networkConnectors>
- <networkConnector name="default-nc" uri="multicast://default" />
- </networkConnectors>
- </broker>
broker实质上就是一个org.apache.activemq.broker.BrokerService实例,可以扩展之以提供简单验证,如下:
java 代码
- public class ConfigurableAuthenticationBroker extends XBeanBrokerService {
-
- private String userName = "jms";
-
- private String password = "password";
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- protected Broker addInterceptors(Broker broker) throws Exception {
- broker = super.addInterceptors(broker);
-
- Map userPasswordMap = new HashMap();
- userPasswordMap.put(userName, password);
- broker = new SimpleAuthenticationBroker(broker, userPasswordMap, new HashMap());
-
- return broker;
- }
-
- }
由于这里采用xbean方式配置,所以扩展的是XBeanBrokerService类。
相应的activemq.xml中的broker配置改为:
xml 代码
- <c:ConfigurableAuthenticationBroker brokerName="localhost" useJmx="true" userName="jms" password="password"
- xmlns:c="java://cn.com.xxx.framework.common.jms">
- <persistenceAdapter>
- <journaledJDBC journalLogFiles="5" dataDirectory="${webapp.root.cn.com.xxx}/WEB-INF/activemq-data"
- dataSource="#derby-ds" />
- </persistenceAdapter>
-
- <transportConnectors>
- <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default" />
- </transportConnectors>
-
- <networkConnectors>
- <networkConnector name="default-nc" uri="multicast://default" />
- </networkConnectors>
- </c:ConfigurableAuthenticationBroker>
可以看到在bean c:ConfigurableAuthenticationBroker的属性中多了userName和password,于是可配置性便有了。如果想要配置更多的用户可以改成map型了,道理都是一样的。
相应的,JMS客户端在连接时就需要加上用户名和密码属性了,否则就会返回错误:
java 代码
- javax.jms.JMSException: User name or password is invalid.
- at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:46)
- at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1181)
- at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1263)
若是采用的spring管理的JMS资源适配器方式,给适配器bean加上用户名、密码属性即可:
xml 代码
-
- <bean id="jmsResourceAdapter" class="org.apache.activemq.ra.ActiveMQResourceAdapter">
- <property name="serverUrl" value="tcp://localhost:61616" />
- <property name="userName" value="jms" />
- <property name="password" value="password" />
- </bean>
其实很简单,但也够用了。回头有空再研究下JAAS方式吧:)
分享到:
相关推荐
总的来说,为ActiveMQ添加验证机制是保障系统安全的重要步骤。无论是通过修改配置文件还是自定义Java类,都能有效地控制对消息队列的访问,防止未经授权的访问和数据泄露。在实际生产环境中,确保ActiveMQ的安全配置...
6. **安全性和认证**:如果ActiveMQ服务器配置了SSL/TLS加密或需要用户名/密码认证,客户端也需要相应地设置安全连接和身份验证。 7. **调试和测试**:在实际部署前,要进行充分的单元测试和集成测试,确保MQTT...
同时,配置文件还定义了用户名bpf.mq.userName和密码bpf.mq.password,这些参数用于客户端连接到ActiveMQ服务器。 在实际应用中,ActiveMQ的配置可能需要根据具体的业务需求进行调整,例如设置消息持久化、网络连接...
7. **安全考虑**:为了保护数据安全,可以配置ActiveMQ服务器使用SSL/TLS加密连接,并对客户端进行身份验证。 通过以上步骤,安卓应用就可以利用ActiveMQ实现实时消息推送,比如实时聊天、通知推送等功能。在实际...
2. **添加依赖**:在 Spring 应用的 Maven 或 Gradle 配置中,添加 ActiveMQ 和 Spring JMS 相关的依赖。例如,在 Maven 的 `pom.xml` 文件中: ```xml <groupId>org.apache.activemq <artifactId>activemq-...
6. **安全性**:确保ActiveMQ服务器和jfianl之间的通信是安全的,可能需要配置SSL/TLS加密,以及对访问ActiveMQ的用户进行身份验证和授权。 7. **测试和监控**:整合完成后,需要进行详尽的测试,确保消息的正确...
5. **测试通信**: 编写简单的发送和接收消息的测试用例,确保消息能够正确地在ActiveMQ服务器和你的应用程序之间传递。 在2018年12月30日的测试中,我们验证了以下关键功能: 1. **连接稳定性**: 持续不断地发送和...
5. 启动ActiveMQ服务器,测试消息的发送和接收,验证持久化是否正常工作。 总之,理解并正确配置ActiveMQ的消息持久化所需Jar包,是确保系统稳定性和数据安全的关键。通过以上讲解,你应该能够更好地掌握如何在项目...
5. **持久化机制**:ActiveMQ提供了强大的消息持久化功能,即使在服务器故障后也能恢复未处理的消息。 6. **管理工具**:ActiveMQ提供了一个基于Web的管理控制台,可以方便地监控和管理消息代理。 7. **性能优化**...
- 将解压后的目录路径添加到系统的PATH环境变量中,这样可以全局访问ActiveMQ的可执行文件。这通常在`~/.bashrc`或`~/.bash_profile`文件中完成。 4. **启动ActiveMQ**: - 进入解压后的目录,如`cd activemq-...
在安全性方面,ActiveMQ 5.14.5加强了身份验证和授权功能,支持标准的JAAS(Java Authentication and Authorization Service)框架,可以配置多种身份验证机制,如简单的用户名/密码、Kerberos或LDAP。权限管理允许...
本主题主要探讨如何将ActiveMQ配置为使用MySQL 8作为其持久化存储方式,以及在这个过程中所需的Jar包。 1. **ActiveMQ与持久化**: - ActiveMQ允许用户选择不同的持久化机制,包括文件系统(KahaDB)和关系数据库...
9. **安全性**:设置用户权限、SSL/TLS加密以及身份验证机制,保护消息传输的安全。 10. **监控和日志**:理解和利用ActiveMQ的监控工具和日志记录,以便于排查问题和优化系统性能。 在实际应用中,你需要将这些...
Apache ActiveMQ是世界上最流行的开源消息代理和集成模式服务器,它基于Java Message Service (JMS) 规范。这个“apache-activemq-5.15.15二进制包,安装包”包含了运行和配置ActiveMQ所需的所有组件,方便用户在...
6. **安全性**:ActiveMQ 提供了用户认证和授权机制,可以通过简单的配置实现基于角色的访问控制。 7. **管理工具**:ActiveMQ 提供了一个Web管理控制台,方便管理员监控和管理消息代理的状态,以及进行配置更改。 ...
通过IP地址授权,我们可以限制只有特定网络地址的客户端才能连接到ActiveMQ服务器,从而保护系统免受未经授权的访问。而特征码授权则可以基于预定义的代码或密钥来验证用户身份,增加了另一层安全防护。 ActiveMQ的...
10. **可扩展性**:通过插件机制,可以轻松地扩展其功能,例如添加新的协议或消息格式支持。 在解压“apache-activemq-5.6.0-bin.tar.gz”后,你会得到一个名为“apache-activemq-5.6.0”的目录,其中包含以下关键...
7. **安全性**:在整合过程中,需要考虑数据的安全性,包括对消息的加密传输、权限控制以及防止恶意文件上传的验证机制。ActiveMQ提供了SSL/TLS支持,可以保护消息在传输过程中的安全。 通过上述步骤,我们可以构建...
1. **配置ActiveMQ**:首先,我们需要在项目中引入ActiveMQ的依赖,并配置ActiveMQ服务器。这通常包括设置服务器端口、数据存储路径以及是否启用持久化等选项。 2. **配置Spring**:Spring的XML配置文件中,我们...
要使用这个压缩包,用户首先需要解压,然后根据配置文件(如conf/activemq.xml)进行必要的定制,最后启动ActiveMQ服务器。如果需要,可以通过修改配置文件实现集群部署、添加安全策略、调整性能参数等高级设置。 ...