我正在尝试用spring boot来实现axon框架。
这是jar的版本。
1.Spring Boot2.6.1
- java 17
1.轴突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。
3条答案
按热度按时间1tu0hz3e1#
我哪里错了?
您的问题出在XStream上,这可以从异常中看出。
几个月前,XStream已经看到一些CVE's在飞行,这需要它的去序列化/序列化方法转变180度。
XStream现在要求您告诉它可以序列化哪些类,而不是采用完全反射的方法来理解如何反序列化/序列化对象。
Axon认为
XStreamSerializer
对于任何应用程序来说都是一个不错的默认值,因为它 * 是 * 能够反序列化任何东西的,然而,上面的内容使这变得不可行,需要在序列化器的末尾做一些修改。这些更改已在Framework 4.5.4中发布,您可以找到其发行说明here。
在注解中可以看到,框架试图为
XStream
示例提供一些为您提供安全的类型,它通过查找@EnableAutoConfiguration
注解类的包名来实现这一点,注意@SpringBootApplication
是用@EnableAutoConfiguration
进行元注解的。Axon的自动配置将允许该软件包下的所有类型,但仅此而已.框架还会给你一个警告,在INFO级别声明如下:
综上所述,我有两点建议:
1.如果您想坚持使用XStream作为序列化器,我建议手动配置一个
XStream
示例,这样您就可以完全控制哪些类可以序列化,哪些类不可以序列化,从而解决前面提到的异常。1.如果你对你正在使用的序列化器不感兴趣,你可以试试Axon Framework提供的
JacksonSerializer
,这需要你通过ObjectMapper
使所有的对象都可以反序列化,这样就引入了额外的依赖和/或注解。要了解如何在Axon中配置串行化器,请参阅其参考指南的this页。
avwztpqn2#
我通过添加XStream bean找到了解决方案。
详情见this post。
希望这能有所帮助
cygmwpex3#
我通过将应用配置为使用
JacksonSerializer
解决了此问题下面是我的环境规范:
解决方案:将此添加到您的
Application.properties