7.3. 控制 JMS 对象序列化


由于 ObjectMessage 可以包含潜在的危险对象,ActiveMQ Artemis 提供了一个简单的类过滤机制,以控制哪些软件包和类值得信任且不被信任。您可以将其类从可信软件包中的对象添加到白名单,以指明它们可以无问题地进行非序列化。您可以将其类从不受信任的软件包添加到黑列表中的对象,以防止它们被反序列化。

ActiveMQ Artemis 过滤对象以进行反序列化,如下所示:

  • 如果白名单和黑名单都为空(默认值),则允许任何可序列化的对象进行反序列化。
  • 如果对象的类或软件包与黑名单中的某一条目匹配,则不允许进行反序列化。
  • 如果对象的类或软件包与白名单中的条目匹配,则允许进行反序列化。
  • 如果对象的类或软件包与黑名单和白名单中的条目匹配,则黑名单中的条目具有优先权,这意味着不允许进行反序列化。
  • 如果对象的类或软件包都不匹配黑名单或白名单,则拒绝对象降序化,除非白名单为空,否则没有指定白名单。

如果对象全名与列表中的某一条目完全匹配,或者其软件包与列表中某一条目匹配,或者是列表中某一条目的子软件包,则对象被视为匹配项。

您可以使用 deserialization- white-list 和 deserialization- black-list 属性 ,在 connection-factory 和 pooled-connection - factory 中指定哪些对象可以被反序列化deserialization-white-list 属性用于定义允许进行反序列化的类或软件包的列表。deserialization-black-list 属性用于定义不允许进行反序列化的类或软件包的列表。

以下命令为 RemoteConnectionFactory 连接工厂创建一个黑名单,并为默认服务器创建 activemq-ra 池连接工厂的白名单。

/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=deserialization-black-list,value=[my.untrusted.package,another.untrusted.package])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=deserialization-white-list,value=[my.trusted.package])
Copy to Clipboard Toggle word wrap

这些命令在 messaging-activemq 子系统中生成以下配置:

<connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" deserialization-black-list="my.untrusted.package another.untrusted.package"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" deserialization-white-list="my.trusted.package" transaction="xa"/>
Copy to Clipboard Toggle word wrap

有关连接工厂和池连接工厂的详情,请参考本指南中的配置连接工厂

您还可以通过配置激活属性在 MDB 中指定哪些对象可以被反序列化。deserializationWhiteList 属性用于定义允许进行反序列化的类或软件包的列表。deserializationBlackList 属性用于定义不允许进行反序列化的类或软件包列表。有关激活属性的更多信息,请参阅为 JBoss EAP 开发 EJB 应用时使用 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/developing_ejb_applications/#configuring_mdbs_using_deployment_descriptor 部署描述符配置 MDB

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat