引子

  ObjectMessage引入的生产者和消费者之间的类路径耦合,ActiveMQ支持他们作为JMS规范的一部分。 ObjectMessage对象依赖marshal/unmarshal进行java序列化,这个过程是不安全的,因为会被恶意利用。从5.12.2和5.13.0开始,ActiveMQ强制用户将ObjectMessages交换的包列入白名单。如果不根据规范进行相应的设置,则会抛出异常This class is not trusted to be serialized as ObjectMessage payload

解决方案

  如果需要交换对象消息,则需要添加应用程序正在使用的包。可通过使用org.apache.activemq.SERIALIZABLE_PACKAGES由代理和activemq系统属性来做到这一点。将设置添加到脚本文件中的ACTIVEMQ_OPTS变量,${ACTIVEMQ_HOME}/bin/env

例如

-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=java.lang,javax.security,java.util,org.apache.activemq,org.fusesource.hawtbuf,com.thoughtworks.xstream.mapper,com.mycompany.myapp

  将com.mycompany.myapp包添加到受信任的包列表中。请注意,此处列出的其他软件包默认启用,因为它们是常规代理工作所必需的。如果您想简化此机制,您可以使用*通配符允许所有包被信任,例如

-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=*

  在客户端,也需要相同的配置,恶意代码ObjectMessage.getObject()调用时反序列化,从而损害应用程序环境。可在代理上使用相同的配置机制,并使用系统属性配置受信任的类。但是,这在客户端应用程序中不方便,在5.12.2和5.13.1中,引入额外配置,使用ActiveMQConnectionFactory,通过设置信任包和信任类添加设置。

使用setTrustedPackages()设置反序列化受信任的包列表

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustedPackages(new ArrayList(Arrays.asList("org.apache.activemq.test,org.apache.camel.test".split(","))));

使用setTrustAllPackages()设置关闭安全检查并信任所有类

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustAllPackages(true);

或者通过设置prop完成

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Properties props = new Properties();
props.setProperty("trustAllPackages","true");
factory.
setProperties(props);

  

更为详细的配置见官方文档:https://activemq.apache.org/objectmessage.html

This class is not trusted to be serialized as ObjectMessage payload.ActiveMQ序列化设置的更多相关文章

  1. Active MQ 传输 ObjectMessage 异常

    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFa ...

  2. javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class com.javaliao.portal.model.TbLogVisit! T

    javax.jms.jmsexception:无法从内容生成正文.可序列化类不可用于代理原因:java.lang.ClassNotFoundException: 禁止类com.javaliao.por ...

  3. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(四)Packet

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. hiberante入门

    Hibernate 目前企业级应用一般均采用面向对象的开发方法,而内存中的对象数据不能永久存在,如想借用关系数据库来永久保存这些数据的话,无疑就存在一个对象-关系的映射过程.在这种情形下,诞生了许多解 ...

  6. JBOSS批量扫描

    exploit-db提供出了EXP,如下: /* * JBoss JMXInvokerServlet Remote Command Execution * JMXInvoker.java v0.3 - ...

  7. 【Zookeeper】源码分析之持久化--FileSnap

    一.前言 前篇博文已经分析了FileTxnLog的源码,现在接着分析持久化中的FileSnap,其主要提供了快照相应的接口. 二.SnapShot源码分析 SnapShot是FileTxnLog的父类 ...

  8. Web API <五> 序列化

    在 Asp.Net Web Api 中提供了两种 媒体类型格式化器(mime-type formatter),分别用于支持 JSON 和 XML 数据的格式化处理.默认两种格式化器已集成到了 Asp. ...

  9. redis 通用函数

    redis 通用函数 construct 命令/方法/函数 Description Creates a Redis client 创建一个Redis客户端 Example $redis = new R ...

  10. GlusterFS分布式存储集群部署记录-相关补充

    接着上一篇Centos7下GlusterFS分布式存储集群环境部署记录文档,继续做一些补充记录,希望能加深对GlusterFS存储操作的理解和熟悉度. ======================== ...

随机推荐

  1. nginx+vite 项目打包及部署

    项目打包及部署到服务器二级路由 例如:我希望将打包的项目部署到 http://localhost:8088/web/ 上 一. 项目配置及打包 项目部署到服务器二级路由需要配置基础路径base,即需要 ...

  2. 用深度学习模型Word2Vec探索《红楼梦》人物关系

    先来看一看结果,发现: 1.贾宝玉和袭人的关系最近. 2.薛宝钗和自己的妈妈关系最近. 3.贾宝玉和林黛玉逼格比较统一,薛宝钗属于独树一帜的逼格调性. 4.大观园中可以看到邢岫烟经常出没... 还有更 ...

  3. [jQuery]z-index属性大于0的元素使用fadeIn无法正常过渡的问题

    rt 问题记录. 尝试使用$('    ').animate({ opacity: 1 }) 会出现相同的问题. 可能是opacity动画与z-index无法兼容(?) 最后的处理方式是改变元素渲染顺 ...

  4. spring-configuration-metadata元数据与additional-spring-configuration-metadata元数据区别

    参考 https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.ht ...

  5. backward函数中gradient参数的一些理解

    当标量对向量求导时不需要该参数,但当向量对向量求导时,若不加上该参数则会报错,显示"grad can be implicitly created only for scalar output ...

  6. PHP Redis - String (字符串)

    string 是 Redis 最基本的类型,与Memcached类似,一个 key 对应一个 value string 类型是二进制 安全的.这意味着 Redis 的 string 可以包含任何数据. ...

  7. 使用python脚本批量造数据

    本篇将采用 Python 脚本的方式进行批量给mysql造数据. 为了使 Python 可以连上数据库(MySQL),并且可以与数据库交互(增删改查等操作),则需要安装 MySQL 客户端操作库.  ...

  8. C# 使用Enumerable.Range 打印数字

    static void Main(string[] args) { var list1 = Enumerable.Range(0, (int)Math.Pow(2, 22)).ToList(); va ...

  9. uniapp 移动端渲染富文本时图片超宽解决方法

    使用replace替换富文本中的图片属性 let reg = new RegExp('<img','gi'); this.info = this.info.replace(reg,'<im ...

  10. Flutter showModalBottomSheet 顶部圆角

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...