SpringBoot + ActiveMQ - 如何设置可信包?

Ant*_*neB 15 java activemq-classic spring-boot

我正在创建两个使用JMS进行通信的springboot服务器和客户端应用程序,并且5.12.1activemq 的发布一切正常,但是一旦我更新到5.12.3版本,我就会收到以下错误:

org.springframework.jms.support.converter.MessageConversionException: Could not convert JMS message; nested exception is javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class MyClass! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes.
Run Code Online (Sandbox Code Playgroud)

我继续提供的URL,我发现我的问题与5.12.2ActiveMQ发布中实现的新安全性有关,我知道我可以通过定义可信包来修复它,但我不知道在哪里可以把这样的配置放在我的SpringBoot项目中.

我在客户端和服务器中对JMS队列的唯一引用是在application.properties中设置它的URI并在我的"main"类上启用JMS @EnableJms,这是我在单独的代理上的配置:

@Configuration
@ConfigurationProperties(prefix = "activemq")
public class BrokerConfiguration {

    /**
     * Defaults to TCP 10000
     */
    private String connectorURI = "tcp://0.0.0.0:10000";
    private String kahaDBDataDir = "../../data/activemq";

    public String getConnectorURI() {
        return connectorURI;
    }

    public void setConnectorURI(String connectorURI) {
        this.connectorURI = connectorURI;
    }

    public String getKahaDBDataDir() {
        return kahaDBDataDir;
    }

    public void setKahaDBDataDir(String kahaDBDataDir) {
        this.kahaDBDataDir = kahaDBDataDir;
    }

    @Bean(initMethod = "start", destroyMethod = "stop")
    public BrokerService broker() throws Exception {
        KahaDBPersistenceAdapter persistenceAdapter = new KahaDBPersistenceAdapter();
        persistenceAdapter.setDirectory(new File(kahaDBDataDir));

        final BrokerService broker = new BrokerService();
        broker.addConnector(getConnectorURI());
        broker.setPersistent(true);
        broker.setPersistenceAdapter(persistenceAdapter);
        broker.setShutdownHooks(Collections.<Runnable> singletonList(new SpringContextHook()));
        broker.setUseJmx(false);

        final ManagementContext managementContext = new ManagementContext();
        managementContext.setCreateConnector(true);
        broker.setManagementContext(managementContext);

        return broker;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道我应该在哪里指定可信包.

谢谢 :)

Mit*_*hun 24

您可以设置以下弹簧引导属性之一application.properties来设置受信任的包.

spring.activemq.packages.trust-all=true

要么

spring.activemq.packages.trusted=<package1>,<package2>,<package3>


Jim*_*m.R 16

添加以下bean:

@Bean
public ActiveMQConnectionFactory activeMQConnectionFactory() {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("your broker URL");
    factory.setTrustedPackages(Arrays.asList("com.my.package"));
    return factory;
}
Run Code Online (Sandbox Code Playgroud)

通过配置属性执行此操作的功能已添加到下一版本:https: //github.com/spring-projects/spring-boot/issues/5631