ActiveMQ-JMS(五):ObjectMessage的安全问题
来源:互联网 发布:面向对象程序设计 java 编辑:程序博客网 时间:2024/06/10 02:33
安全问题
按照apache官网的说明,为了避免收到恶意代码,引入了安全机制,只允许指定的包里的对象能够被传输。原文如下:
ObjectMessage objects depend on Java serialization of marshal/unmarshal object payload. This process is generally considered unsafe as malicious payload can exploit the host system. That’s why starting with versions 5.12.2 and 5.13.0, ActiveMQ enforces users to explicitly whitelist packages that can be exchanged using ObjectMessages.
如果使用的类没有被添加到白名单中,会抛如下异常
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class rms.remotemanagement.ApartmentThread$Message! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes. at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36) at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:208)
解决办法
简单的解决办法
在消息队列的客户端(即应用代码里),添加如下代码即可:
1. 使所有的类都能够被传输
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");factory.setTrustAllPackages(true);
2.使指定的包里的类能够被传输
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");factory.setTrustedPackages(new ArrayList(Arrays.asList("org.apache.activemq.test,org.apache.camel.test".split(","))));
通过修改服务器配置解决
1.修改ActiveMQ配置文件 ${ACTIVEMQ_HOME}/bin/env script,增加org.apache.activemq.SERIALIZABLE_PACKAGES属性。
Dorg.apache.activemq.SERIALIZABLE_PACKAGES=java.lang,javax.security,java.util,org.apache.activemq,org.fusesource.hawtbuf,com.thoughtworks.xstream.mapper,com.mycompany.myapp
2.修改Camel上下文
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> <property name="trustedPackages"> <list> <value>org.apache.activemq.test</value> <value>org.apache.camel.test</value> </list> </property></bean><bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="connectionFactory"/></bean><bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configuration" ref="jmsConfig"/></bean>
或者
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> <property name="trustAllPackages" value="true"/></bean><bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="connectionFactory"/></bean><bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configuration" ref="jmsConfig"/></bean>
0 0
- ActiveMQ-JMS(五):ObjectMessage的安全问题
- (五)ActiveMQ分享JMS简介
- JMS学习五(ActiveMQ消息传送模型)
- 使用JMS发布订阅topic,传递ObjectMessage
- 一个简单的JMS实例(activeMQ)
- JMS--activemq(一)
- 【JMS】JMS之ActiveMQ的使用
- ActiveMQ和JMS的使用
- JMS与ActiveMQ的基本概念
- JMS + ActiveMQ 简单的demo
- ActiveMQ学习(一)--JMS及ActiveMQ
- JMS ActiveMQ学习(一)
- JMS学习(二)activeMQ
- JMS-ActiveMq(安装启动)
- web JMS学习(activeMq)
- java ActiveMQ(一) JMS
- (七)jms activeMQ与spring的集成
- (转载)MQ、JMS以及ActiveMQ 关系的理解
- WebRtc 音频引擎-linux demo
- Java蓝桥杯Huffuman树
- 理解OAuth 2.0
- xpath入门
- 小虫出世----第一个爬虫程序(扒下慕课网站的图片)
- ActiveMQ-JMS(五):ObjectMessage的安全问题
- SQL多表连接查询(详细实例)
- PHP 判断日期格式
- LIGHT OJ 1138 - Trailing Zeroes (III)【N!后0的个数&&二分(好题)】
- zeromq中的zmq_ctx_get
- PAT_乙级 1042 字符统计
- PHP设计模式系列 - 委托模式
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- Hello,everybody.This is my first Blog!!!