我在Sping Boot 项目中使用RabbitMQ:
第一个月
@Component
@AllArgsConstructor
public class UserSender {
private final RabbitTemplate rabbitTemplate;
public String send() {
User user = new User(1L, "Tom", "123");
rabbitTemplate.convertAndSend("userQueue", user);
return "user sender sent: " + user;
}
}
字符串Receiver
的
@Component
public class UserReceiver {
@RabbitListener(queues = "userQueue")
@RabbitHandler
private void process(User user) {
System.out.println("received user: " + user);
}
}
型
启动时出现异常:
Caused by: java.lang.SecurityException: Attempt to deserialize unauthorized class com.example.lab06.entity.User; add allowed class name patterns to the message converter or, if you trust the message orginiator, set environment variable 'SPRING_AMQP_DESERIALIZATION_TRUST_ALL' or system property 'spring.amqp.deserialization.trust.all' to true
型
我查了 Spring AMPQ文档
您可以在这些转换器上使用allowedListPatterns
属性设置模式。或者,如果您信任所有消息发起者,则可以将环境变量SPRING_AMQP_DESERIALIZATION_TRUST_ALL
或系统属性spring.amqp.deserialization.trust.all
设置为true
。
但是,我不能在application.properties
中设置spring.amqp.deserialization.trust.all
。我得到这个错误:
Cannot resolve configuration property 'spring.amqp.deserialization.trust.all'
型
怎么修?
2条答案
按热度按时间2nbm6dog1#
文件指出(强调我的):
.将环境变量
SPRING_AMQP_DESERIALIZATION_TRUST_ALL
或系统属性spring.amqp.deserialization.trust.all
设置为true
。在
application.properties
中配置的值是 not 环境变量或系统属性。环境变量在您的环境中设置,系统属性通常作为-D
参数传递给JVM。因此,您需要以适合您的用例的任何方式将
spring.amqp.deserialization.trust.all
设置为系统属性。值得注意的是,此设置实质上绕过了在验证消息时的安全检查,并可能使您的应用程序容易受到远程攻击。建议您使用转换器上的
allowedListPatterns
属性设置模式。mnemlml82#
谢谢@Bertram,这是我使用
setTrustedPackages
的解决方案:字符串