关于ActiveMQ序列化对象爆“Forbidden class xxx! ...”问题的解决
如题所示,最开始使用了默认配置:
<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! ...”问题的解决相关推荐
- Hessian RPC示例和基于Http请求的Hessian序列化对象传输
本文主要介绍两个案例,第一个是使用Hessian来实现远程过程调用,第二个是通过Hessian提供的二进制RPC协议进行和Servlet进行数据交互,Hessian本身即是基于Http的RPC实现. ...
- Java基础/利用fastjson序列化对象为JSON
利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...
- oleVariant序列化对象
midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象. 下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMET ...
- python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象
一:dat文件 在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别.虽然对txt文件操作已经能够满足储存数据的需求,但txt文件 ...
- Dubbo序列化对象
序列化对象 Dubbo分为服务端,客户端 客户端调用服务,需要将pojo传递给客户端调用者 对象在传输过程中,需要序列化 在表现层,需要反序列化对象 对象序列化 需要实现序列化接口 Pojo里面所有不 ...
- python学习-序列化对象(pickle)
文章目录 序列化(pickle) 序列化(pickle) 序列化对象,引入内置模块: import pickle 序列化写文件使用二进制的方式去写,需要使用wb 我在定义时,类成员变量使用了__修饰, ...
- Jquey将序列化对象在前台显示地几种方式
<1>序列化对象为单个对象的时候 //Student person = new Student() { Name = "张三",Code="001" ...
- python self 序列_python中序列化对象
# 序列化对象p1 import pickle # 内置库 class People: def __init__(self, name, a ...
- flutter 序列化_如何在Flutter中序列化对象
flutter 序列化 If you intend to save user data to the shared preferences or local storage in your Flutt ...
最新文章
- python 用户输入_Python中如何让用户输入内容
- java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧
- Java并发编程:ThreadLocal
- PID控制器改进笔记之一:改进PID控制器之参数动态调整
- td里面字体大小怎么改_教你王者荣耀改战区
- 屏幕时代,开发者如何撬动亿级受众,获得用户增长
- linux init.d 密码,Linux基础之init.d、rc.local
- redis源码剖析(3):基础数据结构dict
- layui中折叠面板的使用
- Python正则表达式详解
- 主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)
- 阿里 P7 到底是怎样的水平?
- OpenGL开启Gouraud明暗处理,减少马赫夫效应
- 2022-2028全球与中国健康资讯交换(HIE)市场现状及未来发展趋势
- (转)旅游拍照必读:10个经典人像摄影案例@『国家地理』
- 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知...
- Mapbox浅析(快速入门Mapbox)
- 给iframe添加loading状态
- 综合案例 跳转到主页面(index)
- 加入我们 | 科技圈又要招人啦