日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于ActiveMQ序列化对象爆“Forbidden class xxx! ...”问题的解决 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如題所示,最開始使用了默認(rèn)配置:

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

然后使用ActiveMQ對(duì)對(duì)象進(jìn)行序列化時(shí)報(bào)了如下錯(cuò)誤:

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

關(guān)于這個(gè)錯(cuò)誤,其實(shí)在報(bào)錯(cuò)的提示里面已經(jīng)給出了官方的解決方案的地址,即:http://activemq.apache.org/objectmessage.html

出現(xiàn)這個(gè)問題的原因在于:從ActiveMQ5.12.2 開始,為了增強(qiáng)這個(gè)框架的安全性,ActiveMQ將強(qiáng)制用戶配置可序列化的包名。因此具體的解決方案如下:

按照官方的提示修改“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>

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

如果不想一個(gè)個(gè)地添加的話,也可以使用“trustAllPackages”參數(shù):

<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”參數(shù),在這行參數(shù)后面添加如下的配置:

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

但是經(jīng)過嘗試我發(fā)現(xiàn)并沒有效果,其實(shí)僅僅只是修改“ActiveMQ 的連接工廠”那段配置就可以解決這個(gè)問題了

最后測(cè)試效果如下:

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

運(yùn)行這個(gè)方法之后,輸出如下:

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

可以發(fā)現(xiàn),問題成功解決了

轉(zhuǎn)載于:https://blog.51cto.com/983836259/1877600

總結(jié)

以上是生活随笔為你收集整理的关于ActiveMQ序列化对象爆“Forbidden class xxx! ...”问题的解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。