为什么会发生?
怎么修复?
方法一:设置环境变量
- 如果你信任消息的来源,可以设置环境变量
SPRING_AMQP_DESERIALIZATION_TRUST_ALL
为true
,允许反序列化所有类
export SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true
方法二:设置系统属性
- 在应用启动时设置系统属性
spring.amqp.deserialization.trust.all
为true
System.setProperty("spring.amqp.deserialization.trust.all", "true");
方法三:配置反序列化信任的包或者类
@Configuration
public class RabbitMQConfig {
@Bean
public MessageConverter jsonToMapMessageConverter() {
DefaultClassMapper defaultClassMapper = new DefaultClassMapper();
// 指定反序列化期间要信任的一组包,星号 ( * ) 表示全部信任
defaultClassMapper.setTrustedPackages("td");
Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
jackson2JsonMessageConverter.setClassMapper(defaultClassMapper);
return jackson2JsonMessageConverter;
}
}
@Configuration
public class RabbitMQConfig {
@Bean
public SimpleMessageConverter converter() {
SimpleMessageConverter converter = new SimpleMessageConverter();
// 示例: com. foo.* 、 *.MyClass
converter.setAllowedListPatterns("td");
return converter;
}
}
- 以上二选一即可
- 如果你只需要信任几个固定的包,使用 DefaultClassMapper 可能更简单。
- 如果需要更灵活的控制,例如只信任某些特定的类名模式,使用 SimpleMessageConverter 的 allowedListPatterns 可能更合适。
参考文章地址