【问题标题】:Getting ForbiddenClassException in Axon/SpringBoot在 Axon/Spring Boot 中获取 ForbiddenClassException
【发布时间】:2022-01-07 16:28:05
【问题描述】:

我正在尝试使用 spring boot 实现 axon 框架。

这是 jar 的版本。

  1. Spring Boot 2.6.1
  2. Java 17
  3. 轴突 4.5.6

我的项目结构是:

  • 用户命令
  • 用户查询
  • 用户核心(公共 jar 包含事件)

我在尝试从查询应用程序访问 UserRegisteredEvent* 时遇到以下异常。

com.thoughtworks.xstream.security.ForbiddenClassException: com.tesla.user.core.events.UserRegisteredEvent
    at com.thoughtworks.xstream.security.NoTypePermission.allows(NoTypePermission.java:26) ~[xstream-1.4.18.jar:1.4.18]

我哪里出错了?

注意:

我已经尝试将我的 java 版本降级到 16 和 spring boot 到 2.4.*。

【问题讨论】:

    标签: java spring-boot axon


    【解决方案1】:

    我哪里出错了?

    从异常中可以看出,您的问题在于 XStream。

    XStream 已经看到一些 CVE's 在几个月前飞了起来,这需要它的反序列化方法来旋转 180 度。

    现在,XStream 不再采用完整的反思方法来理解如何反序列化/序列化对象,而是要求您知道它可以序列化哪些类。

    Axon 将 XStreamSerializer 视为任何应用程序的一个不错的默认值,因为它能够反序列化/序列化所有内容。但是,上述情况使这不可行,并且需要在序列化程序的末尾进行一些更改。

    这些更改已在 Framework 4.5.4 中发布,您可以找到发布说明here

    您可以在注释中发现,该框架试图提供一个 XStream 实例,其中包含一些为您保护的类型。它通过查找 @EnableAutoConfiguration 注释类的包名来实现。请注意,@SpringBootApplication 使用 @EnableAutoConfiguration 进行元注释。

    Axon 的自动配置将允许该包下的所有类型,但就是这样。该框架还向您发出警告,在 INFO 级别说明以下内容:

    Initializing an XStream instance since none was found. 
    The auto configuration base packages will be used as wildcards for the XStream security settings.
    

    说了这么多,我有两个建议给你:

    1. 如果您想坚持使用 XStream 作为序列化程序,我建议手动配置一个 XStream 实例。这使您可以完全控制哪些类可以序列化或不能序列化,从而解决了前面提到的异常。
    2. 如果您对所使用的序列化程序不感兴趣,可以尝试 Axon Framework 提供的JacksonSerializer。这将要求您通过ObjectMapper 使所有对象可反序列化/可序列化。从而引入了额外的依赖和/或注释。

    要了解如何在 Axon 中配置序列化程序,请参阅他们的参考指南的 this 页面。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2021-11-05
      • 2020-06-18
      • 1970-01-01
      相关资源
      最近更新 更多