如题所示,最开始使用了默认配置:

<amq:connectionFactory id="amqConnectionFactory"brokerURL="tcp://${activemq.ip}:61616" userName="${activemq.username}"password="${activemq.passwd}" />

然后使用ActiveMQ对对象进行序列化时报了如下错误:

Caused by: java.lang.ClassNotFoundException: Forbidden class cn.zifangsky.model.User! 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.ClassLoadingAwareObjectInputStream.checkSecurity(ClassLoadingAwareObjectInputStream.java:112)at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:57)at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)at java.io.ObjectInputStream.readClassDesc(Unknown Source)at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)at java.io.ObjectInputStream.readObject0(Unknown Source)at java.io.ObjectInputStream.readObject(Unknown Source)at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:206)... 13 more

关于这个错误,其实在报错的提示里面已经给出了官方的解决方案的地址,即:http://activemq.apache.org/objectmessage.html

出现这个问题的原因在于:从ActiveMQ5.12.2 开始,为了增强这个框架的安全性,ActiveMQ将强制用户配置可序列化的包名。因此具体的解决方案如下:

按照官方的提示修改“ActiveMQ 连接工厂”的配置:

<bean id="amqConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://${activemq.ip}:61616"/><property name="userName" value="${activemq.username}" /><property name="password" value="${activemq.passwd}" /><property name="trustedPackages"><list><value>java.lang</value><value>javax.security</value><value>java.util</value><value>org.apache.activemq</value><value>cn.zifangsky.activemq</value><value>cn.zifangsky.model</value></list></property>
</bean>

这里添加上信任的可序列化的包即可

如果不想一个个地添加的话,也可以使用“trustAllPackages”参数:

<bean id="amqConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://${activemq.ip}:61616"/><property name="userName" value="${activemq.username}" /><property name="password" value="${activemq.passwd}" /><property name="trustAllPackages" value="true"/>
</bean>

注:官方还提示可以给activemq.bat文件(PS:D:/apache-activemq-5.14.1/bin/activemq.bat)添加信任的包名。也就是修改文件中的“ACTIVEMQ_OPTS”参数,在这行参数后面添加如下的配置:

-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=java.lang,javax.security,java.util,org.apache.activemq,cn.zifangsky.activemq,cn.zifangsky.model

但是经过尝试我发现并没有效果,其实仅仅只是修改“ActiveMQ 的连接工厂”那段配置就可以解决这个问题了

最后测试效果如下:

   @Testpublic void testObject(){User u = new User((long) 1,"test","123456");queueSender2.send("object.queue", u);}

运行这个方法之后,输出如下:

接收到消息: User [id=1, username=test, password=123456]

可以发现,问题成功解决了

转载于:https://blog.51cto.com/983836259/1877600

关于ActiveMQ序列化对象爆“Forbidden class xxx! ...”问题的解决相关推荐

  1. Hessian RPC示例和基于Http请求的Hessian序列化对象传输

    本文主要介绍两个案例,第一个是使用Hessian来实现远程过程调用,第二个是通过Hessian提供的二进制RPC协议进行和Servlet进行数据交互,Hessian本身即是基于Http的RPC实现. ...

  2. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

  3. oleVariant序列化对象

    midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象. 下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMET ...

  4. python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象

    一:dat文件 在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别.虽然对txt文件操作已经能够满足储存数据的需求,但txt文件 ...

  5. Dubbo序列化对象

    序列化对象 Dubbo分为服务端,客户端 客户端调用服务,需要将pojo传递给客户端调用者 对象在传输过程中,需要序列化 在表现层,需要反序列化对象 对象序列化 需要实现序列化接口 Pojo里面所有不 ...

  6. python学习-序列化对象(pickle)

    文章目录 序列化(pickle) 序列化(pickle) 序列化对象,引入内置模块: import pickle 序列化写文件使用二进制的方式去写,需要使用wb 我在定义时,类成员变量使用了__修饰, ...

  7. Jquey将序列化对象在前台显示地几种方式

    <1>序列化对象为单个对象的时候 //Student person = new Student() { Name = "张三",Code="001" ...

  8. python self 序列_python中序列化对象

    # 序列化对象p1 import pickle                               # 内置库 class People: def __init__(self, name, a ...

  9. flutter 序列化_如何在Flutter中序列化对象

    flutter 序列化 If you intend to save user data to the shared preferences or local storage in your Flutt ...

最新文章

  1. python 用户输入_Python中如何让用户输入内容
  2. java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧
  3. Java并发编程:ThreadLocal
  4. PID控制器改进笔记之一:改进PID控制器之参数动态调整
  5. td里面字体大小怎么改_教你王者荣耀改战区
  6. 屏幕时代,开发者如何撬动亿级受众,获得用户增长
  7. linux init.d 密码,Linux基础之init.d、rc.local
  8. redis源码剖析(3):基础数据结构dict
  9. layui中折叠面板的使用
  10. Python正则表达式详解
  11. 主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)
  12. 阿里 P7 到底是怎样的水平?
  13. OpenGL开启Gouraud明暗处理,减少马赫夫效应
  14. 2022-2028全球与中国健康资讯交换(HIE)市场现状及未来发展趋势
  15. (转)旅游拍照必读:10个经典人像摄影案例@『国家地理』
  16. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知...
  17. Mapbox浅析(快速入门Mapbox)
  18. 给iframe添加loading状态
  19. 综合案例 跳转到主页面(index)
  20. 加入我们 | 科技圈又要招人啦

热门文章

  1. Python获取当前目录
  2. Python 异常后变量的赋值
  3. twisted系列教程十八–异步操作的并行运行
  4. ubuntu vim配置所有用户生效
  5. 【刷题】HDU 4966 GGS-DDU
  6. 案例49-crm练习获取客户列表带有分页和筛选功能
  7. TCP滑窗与拥塞控制
  8. 大道至简读后感(七八章)
  9. Asp.net MVC 多语言问题的解决方案
  10. Preloading组件。