SpringBoot + ActiveMQ - 신뢰할 수 있는 패키지를 설정하는 방법
JMS를 사용하여 통신하는 두 개의 Springboot 서버 및 클라이언트 애플리케이션을 만들고 있으며, 릴리스와 관련하여 모든 것이 정상적으로 작동하고 있습니다.5.12.1
활성화된 mq의 경우, 그러나 업데이트하자마자.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.
제공된 URL로 이동하여 제 문제가 새로운 보안과 관련되어 있다는 것을 알게 되었습니다.5.12.2
ActiveMQ의 릴리스이며 신뢰할 수 있는 패키지를 정의하여 수정할 수 있다는 것은 알고 있지만 SpringBoot 프로젝트에서 이러한 구성을 어디에 두어야 할지 모르겠습니다.
클라이언트와 서버에서 JMS 큐를 참조하는 유일한 방법은 application.properties에서 URI를 설정하고 "메인" 클래스에서 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;
}
}
그래서 신뢰할 수 있는 패키지를 어디에 지정해야 하는지 알고 싶습니다.
감사합니다 :)
다음 스프링 부트 속성 중 하나를 설정하면 됩니다.application.properties
신뢰할 수 있는 패키지를 설정합니다.
spring.activemq.packages.trust-all=true
또는
spring.activemq.packages.trusted=<package1>,<package2>,<package3>
다음 콩을 추가합니다.
@Bean
public ActiveMQConnectionFactory activeMQConnectionFactory() {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("your broker URL");
factory.setTrustedPackages(Arrays.asList("com.my.package"));
return factory;
}
구성 속성을 통해 이 작업을 수행하는 기능이 다음 릴리스에 추가되었습니다. https://github.com/spring-projects/spring-boot/issues/5631
방법:public void setTrustedPackages(List<String> trustedPackages)
설명: 송수신에 사용되는 모든 패키지 추가Message
물건.
코드:connectionFactory.setTrustedPackages(Arrays.asList("org.api","java.util"))
구현된 코드:
private static final String DEFAULT_BROKER_URL = "tcp://localhost:61616";
private static final String RESPONSE_QUEUE = "api-response";
@Bean
public ActiveMQConnectionFactory connectionFactory(){
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(DEFAULT_BROKER_URL);
connectionFactory.setTrustedPackages(Arrays.asList("org.api","java.util"));
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate(){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setDefaultDestinationName(RESPONSE_QUEUE);
return template;
}
여전히 답을 찾고 있는 사람이 있다면, 아래 스니펫이 저에게 도움이 되었습니다.
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(BROKER_URL);
connectionFactory.setPassword(BROKER_USERNAME);
connectionFactory.setUserName(BROKER_PASSWORD);
connectionFactory.setTrustAllPackages(true); // all packages are considered as trusted
//connectionFactory.setTrustedPackages(Arrays.asList("com.my.package")); // selected packages
return connectionFactory;
}
나는 아래와 같은 Java_opts를 설정하고 java 명령어로 전달하고 있으며 나를 위해 작동합니다.
JAVA_OPTS=-Xmx256M -Xms16M -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=*
java $JAVA_OPTS -Dapp.config.location=/data/config -jar <your_jar>.jar --spring.config.location=file:/data/config/<your config file path>.yml
예, 새 버전에서 구성을 찾았습니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
spring:
profiles:
active: @profileActive@
cache:
ehcache:
config: ehcache.xml
activemq:
packages:
trusted: com.stylrplus.api.model
언급URL : https://stackoverflow.com/questions/36619432/springboot-activemq-how-to-set-trusted-packages
'programing' 카테고리의 다른 글
PLSQL - 사용자의 모든 데이터베이스 개체 삭제 (0) | 2023.07.09 |
---|---|
목록의 예외를 처리하는 방법은 무엇입니까? (0) | 2023.07.09 |
동일한 mongodb 쿼리에서 개수 및 고유 개수별 그룹화 선택 (0) | 2023.07.04 |
Visual Studio Code - 여전히 VS Code에 표시되는 GitHub에서 삭제된 분기를 제거하시겠습니까? (0) | 2023.07.04 |
GitHub에서 호스팅되는 Spring Cloud Config Server에서 repo 액세스 시 인증 문제가 발생했습니다. (0) | 2023.07.04 |