`

为ActiveMQ服务器添加简单验证机制

    博客分类:
  • JMS
阅读更多

为ActiveMQ服务器添加简单验证机制

关键字: Java, JMS

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 代码 
  1. <broker brokerName="localhost" useJmx="true">  
  2.     <persistenceAdapter>  
  3.         <journaledJDBC journalLogFiles="5" dataDirectory="${webapp.root.cn.com.reachway}/WEB-INF/activemq-data"  
  4.             dataSource="#derby-ds" />  
  5.     </persistenceAdapter>  
  6.   
  7.     <transportConnectors>  
  8.         <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default" />  
  9.     </transportConnectors>  
  10.   
  11.     <networkConnectors>  
  12.         <networkConnector name="default-nc" uri="multicast://default" />  
  13.     </networkConnectors>  
  14. </broker>  

broker实质上就是一个org.apache.activemq.broker.BrokerService实例,可以扩展之以提供简单验证,如下:

java 代码
  1. public class ConfigurableAuthenticationBroker extends XBeanBrokerService {   
  2.   
  3.     private String userName = "jms";   
  4.        
  5.     private String password = "password";   
  6.   
  7.     public String getUserName() {   
  8.         return userName;   
  9.     }   
  10.   
  11.     public void setUserName(String userName) {   
  12.         this.userName = userName;   
  13.     }   
  14.   
  15.     public String getPassword() {   
  16.         return password;   
  17.     }   
  18.   
  19.     public void setPassword(String password) {   
  20.         this.password = password;   
  21.     }   
  22.   
  23.     protected Broker addInterceptors(Broker broker) throws Exception {   
  24.         broker = super.addInterceptors(broker);   
  25.            
  26.         Map userPasswordMap = new HashMap();   
  27.         userPasswordMap.put(userName, password);   
  28.         broker = new SimpleAuthenticationBroker(broker, userPasswordMap, new HashMap());   
  29.            
  30.         return broker;   
  31.     }   
  32.        
  33. }  

由于这里采用xbean方式配置,所以扩展的是XBeanBrokerService类。

相应的activemq.xml中的broker配置改为:

xml 代码
  1. <c:ConfigurableAuthenticationBroker brokerName="localhost" useJmx="true" userName="jms" password="password"  
  2.     xmlns:c="java://cn.com.xxx.framework.common.jms">  
  3.     <persistenceAdapter>  
  4.         <journaledJDBC journalLogFiles="5" dataDirectory="${webapp.root.cn.com.xxx}/WEB-INF/activemq-data"  
  5.             dataSource="#derby-ds" />  
  6.     </persistenceAdapter>  
  7.   
  8.     <transportConnectors>  
  9.         <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default" />  
  10.     </transportConnectors>  
  11.   
  12.     <networkConnectors>  
  13.         <networkConnector name="default-nc" uri="multicast://default" />  
  14.     </networkConnectors>  
  15. </c:ConfigurableAuthenticationBroker>  

可以看到在bean c:ConfigurableAuthenticationBroker的属性中多了userName和password,于是可配置性便有了。如果想要配置更多的用户可以改成map型了,道理都是一样的。

相应的,JMS客户端在连接时就需要加上用户名和密码属性了,否则就会返回错误:

java 代码
  1. javax.jms.JMSException: User name or password is invalid.   
  2.     at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:46)   
  3.     at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1181)   
  4.     at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1263)   

若是采用的spring管理的JMS资源适配器方式,给适配器bean加上用户名、密码属性即可:

xml 代码
  1. <!---->  
  2. <bean id="jmsResourceAdapter" class="org.apache.activemq.ra.ActiveMQResourceAdapter">  
  3.     <property name="serverUrl" value="tcp://localhost:61616" />  
  4.     <property name="userName" value="jms" />  
  5.     <property name="password" value="password" />  
  6. </bean>  

其实很简单,但也够用了。回头有空再研究下JAAS方式吧:)

分享到:
评论

相关推荐

    为activemq服务器添加简单验证机制

    总的来说,为ActiveMQ添加验证机制是保障系统安全的重要步骤。无论是通过修改配置文件还是自定义Java类,都能有效地控制对消息队列的访问,防止未经授权的访问和数据泄露。在实际生产环境中,确保ActiveMQ的安全配置...

    qt activemq mqtt 动态库

    6. **安全性和认证**:如果ActiveMQ服务器配置了SSL/TLS加密或需要用户名/密码认证,客户端也需要相应地设置安全连接和身份验证。 7. **调试和测试**:在实际部署前,要进行充分的单元测试和集成测试,确保MQTT...

    ActiveMq安装.docx

    同时,配置文件还定义了用户名bpf.mq.userName和密码bpf.mq.password,这些参数用于客户端连接到ActiveMQ服务器。 在实际应用中,ActiveMQ的配置可能需要根据具体的业务需求进行调整,例如设置消息持久化、网络连接...

    ActiveMq安卓端

    7. **安全考虑**:为了保护数据安全,可以配置ActiveMQ服务器使用SSL/TLS加密连接,并对客户端进行身份验证。 通过以上步骤,安卓应用就可以利用ActiveMQ实现实时消息推送,比如实时聊天、通知推送等功能。在实际...

    Spring整合ActiveMQ简单实例

    2. **添加依赖**:在 Spring 应用的 Maven 或 Gradle 配置中,添加 ActiveMQ 和 Spring JMS 相关的依赖。例如,在 Maven 的 `pom.xml` 文件中: ```xml &lt;groupId&gt;org.apache.activemq &lt;artifactId&gt;activemq-...

    jfianl整合activemq

    6. **安全性**:确保ActiveMQ服务器和jfianl之间的通信是安全的,可能需要配置SSL/TLS加密,以及对访问ActiveMQ的用户进行身份验证和授权。 7. **测试和监控**:整合完成后,需要进行详尽的测试,确保消息的正确...

    ActiveMQ-CPP在vs2017上测试通过

    5. **测试通信**: 编写简单的发送和接收消息的测试用例,确保消息能够正确地在ActiveMQ服务器和你的应用程序之间传递。 在2018年12月30日的测试中,我们验证了以下关键功能: 1. **连接稳定性**: 持续不断地发送和...

    activemq消息持久化所需Jar包

    5. 启动ActiveMQ服务器,测试消息的发送和接收,验证持久化是否正常工作。 总之,理解并正确配置ActiveMQ的消息持久化所需Jar包,是确保系统稳定性和数据安全的关键。通过以上讲解,你应该能够更好地掌握如何在项目...

    ActiveMQ.zip

    5. **持久化机制**:ActiveMQ提供了强大的消息持久化功能,即使在服务器故障后也能恢复未处理的消息。 6. **管理工具**:ActiveMQ提供了一个基于Web的管理控制台,可以方便地监控和管理消息代理。 7. **性能优化**...

    activemq安装.rar

    - 将解压后的目录路径添加到系统的PATH环境变量中,这样可以全局访问ActiveMQ的可执行文件。这通常在`~/.bashrc`或`~/.bash_profile`文件中完成。 4. **启动ActiveMQ**: - 进入解压后的目录,如`cd activemq-...

    apache-activemq-5.14.5。windows版本

    在安全性方面,ActiveMQ 5.14.5加强了身份验证和授权功能,支持标准的JAAS(Java Authentication and Authorization Service)框架,可以配置多种身份验证机制,如简单的用户名/密码、Kerberos或LDAP。权限管理允许...

    ActiveMQ配置Mysql8为持久化方式所需Jar包.rar

    本主题主要探讨如何将ActiveMQ配置为使用MySQL 8作为其持久化存储方式,以及在这个过程中所需的Jar包。 1. **ActiveMQ与持久化**: - ActiveMQ允许用户选择不同的持久化机制,包括文件系统(KahaDB)和关系数据库...

    activeMQ所需的头文件和静态库

    9. **安全性**:设置用户权限、SSL/TLS加密以及身份验证机制,保护消息传输的安全。 10. **监控和日志**:理解和利用ActiveMQ的监控工具和日志记录,以便于排查问题和优化系统性能。 在实际应用中,你需要将这些...

    apache-activemq-5.15.15二进制包,安装包

    Apache ActiveMQ是世界上最流行的开源消息代理和集成模式服务器,它基于Java Message Service (JMS) 规范。这个“apache-activemq-5.15.15二进制包,安装包”包含了运行和配置ActiveMQ所需的所有组件,方便用户在...

    activemq 5.15.15源码包,源码包

    6. **安全性**:ActiveMQ 提供了用户认证和授权机制,可以通过简单的配置实现基于角色的访问控制。 7. **管理工具**:ActiveMQ 提供了一个Web管理控制台,方便管理员监控和管理消息代理的状态,以及进行配置更改。 ...

    activemq通过IP或特征码授权插件

    通过IP地址授权,我们可以限制只有特定网络地址的客户端才能连接到ActiveMQ服务器,从而保护系统免受未经授权的访问。而特征码授权则可以基于预定义的代码或密钥来验证用户身份,增加了另一层安全防护。 ActiveMQ的...

    apache-activemq-5.6.0-bin.tar.gz

    10. **可扩展性**:通过插件机制,可以轻松地扩展其功能,例如添加新的协议或消息格式支持。 在解压“apache-activemq-5.6.0-bin.tar.gz”后,你会得到一个名为“apache-activemq-5.6.0”的目录,其中包含以下关键...

    activeMQ在文件上传的应用

    7. **安全性**:在整合过程中,需要考虑数据的安全性,包括对消息的加密传输、权限控制以及防止恶意文件上传的验证机制。ActiveMQ提供了SSL/TLS支持,可以保护消息在传输过程中的安全。 通过上述步骤,我们可以构建...

    采用Spring整合activeMQ与quartz的JMS数据同步实例

    1. **配置ActiveMQ**:首先,我们需要在项目中引入ActiveMQ的依赖,并配置ActiveMQ服务器。这通常包括设置服务器端口、数据存储路径以及是否启用持久化等选项。 2. **配置Spring**:Spring的XML配置文件中,我们...

    activemq的包

    要使用这个压缩包,用户首先需要解压,然后根据配置文件(如conf/activemq.xml)进行必要的定制,最后启动ActiveMQ服务器。如果需要,可以通过修改配置文件实现集群部署、添加安全策略、调整性能参数等高级设置。 ...

Global site tag (gtag.js) - Google Analytics