美文网首页
Spring Boot RabbitMQ attempt to

Spring Boot RabbitMQ attempt to

作者: 虹猫日志 | 来源:发表于2024-06-25 11:28 被阅读0次

为什么会发生?

  • 因为存在:CVE-2023-34050 Spring AMQP Deserialization Vulnerability.出于安全考虑,Spring默认会限制反序列化某些类,以防止潜在的安全漏洞(例如,反序列化攻击)。
  • 如果你的Spring Boot 版本不是在2.7.173.0.123.1.53.2.0 起始之后,由于官方还未修正该漏洞,当然不会出现此异常。

怎么修复?

方法一:设置环境变量

  • 如果你信任消息的来源,可以设置环境变量SPRING_AMQP_DESERIALIZATION_TRUST_ALLtrue,允许反序列化所有类
export SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true

方法二:设置系统属性

  • 在应用启动时设置系统属性spring.amqp.deserialization.trust.alltrue
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 可能更合适。

参考文章地址

相关文章

网友评论

      本文标题:Spring Boot RabbitMQ attempt to

      本文链接:https://www.haomeiwen.com/subject/mvtjcjtx.html