使用 SpringBoot 1.3.2.RELEASE 时,通过 ActiveMQ 发送文件引用的最佳方式是啥?
Posted
技术标签:
【中文标题】使用 SpringBoot 1.3.2.RELEASE 时,通过 ActiveMQ 发送文件引用的最佳方式是啥?【英文标题】:What is the best way to send a file reference through ActiveMQ, when using SpringBoot 1.3.2.RELEASE?使用 SpringBoot 1.3.2.RELEASE 时,通过 ActiveMQ 发送文件引用的最佳方式是什么? 【发布时间】:2016-02-17 12:26:38 【问题描述】:我使用的是 SpringBoot 1.3.1.RELEASE,通过 ActiveMQ 中的消息发送文件引用没有问题。
自从我更新到 SpringBoot 1.3.2.RELEASE 我一直在试验一个问题。 activemq客户端拒绝读取文件引用报如下错误:
Caused by: java.lang.ClassNotFoundException: Forbidden class java.io.File! 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) ~[activemq-client-5.12.2.jar:5.12.2]
at org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:57) ~[activemq-client-5.12.2.jar:5.12.2]
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613) ~[na:1.8.0_05]
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518) ~[na:1.8.0_05]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774) ~[na:1.8.0_05]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351) ~[na:1.8.0_05]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) ~[na:1.8.0_05]
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:206) ~[activemq-client-5.12.2.jar:5.12.2]
... 16 common frames omitted
我解决这个问题的唯一方法是在创建 bean JmsTransactionManager 时添加前两行。
@Bean
public JmsTransactionManager jmsTransactionManager(ConnectionFactory cf)
ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory)cf;
amqCf.setTrustAllPackages(true); // Without this we are not able to send the object type File.class through a JMS message. This problem started when we migrated to Springboot 1.3.2-RELEASE
JmsTransactionManager result = new JmsTransactionManager();
result.setConnectionFactory(cf);
return result;
有没有更推荐的方法来解决这个问题?
【问题讨论】:
为什么不只传递一个 URL? @user1581366 如您的问题中所述,您使用setTrustAllPackages
是否遇到过任何问题?我现在也在努力解决这个问题,并希望将您的解决方案与amqCf.setTrustAllPackages(true);
一起使用
@alexanoid,这种方法绝对没有问题。
【参考方案1】:
Java 序列化存在许多使您面临风险的安全漏洞。更新后的代理现在将大多数对象列入黑名单,并要求您创建要处理的事物的白名单。
ActiveMQ Website 上有相关文档。
【讨论】:
以上是关于使用 SpringBoot 1.3.2.RELEASE 时,通过 ActiveMQ 发送文件引用的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar