JMS 또는 Jakarta Messaging 허용 목록 설정 및 사용

이 정보는 허용 목록이 작동하는 방법과 IBM® MQ classes for JMS 또는 IBM MQ classes for Jakarta Messaging 에 포함된 기능을 사용하여 애플리케이션이 처리할 수 있는 ObjectMessages 유형의 목록을 포함하는 허용 목록 파일을 생성하도록 설정하는 방법을 알려줍니다.

시작하기 전에

중요:

가능하면 용어 허용 목록은 용어 화이트리스트로 대체되었습니다. 여기에는 이 주제에서 언급된 일부 Java 시스템 특성 이름이 포함됩니다. 기존 구성을 변경할 필요는 없습니다. 이전 시스템 특성 이름도 계속해서 작동합니다.

이 작업을 시작하기 전에 허용 목록 개념을 읽고 이해했는지 확인하세요

이 태스크 정보

JMSJakarta Messaging 는 공통적으로 많이 공유하므로 이 주제에서 JMS 에 대한 추가 참조는 둘 다를 참조하는 것으로 간주할 수 있습니다. 필요에 따라 차이점이 강조표시됩니다.

허용 목록 기능을 사용하도록 설정한 경우 IBM MQ classes for JMS 는 다음과 같은 방법으로 해당 기능을 사용합니다.
  • 애플리케이션에서 ObjectMessage를 전송하려는 경우 다음을 호출하여 두 가지 방법 중 하나로 작성할 수 있습니다.
    • Session.createObjectMessage(Serializable) 메소드. 메시지에 포함할 오브젝트를 전달합니다.
    • Session.createObjectMessage() 메소드. 빈 ObjectMessage를 작성한 후 ObjectMessage.setObject(Serializable)를 호출하여 ObjectMessage 내 전송할 오브젝트를 저장합니다.

    Session.createObjectMessage(Serializable) 또는 ObjectMessage.setObject(Serializable) 메소드가 호출되면 JMS에 대한 클래스가 허용 목록에 언급된 유형으로 전달되는 오브젝트인지 여부를 확인합니다.

    언급된 유형인 경우 오브젝트가 직렬화되고 ObjectMessage에 저장됩니다. 그러나 오브젝트가 허용 목록에 없는 유형인 경우 IBM MQ classes for JMS 는 다음 메시지를 포함하는 JMSException을 처리합니다.
    JMSCC0052: An exception occurred while serializing the object:
    'java.io.InvalidClassException: <object class>; The class may not be serialized 
    or deserialized as it has not been included in the allowlist '<allowlist>'.
    애플리케이션에서 해당 예외가 다시 발행됩니다.
    중요: Session.createObjectMessage(Serializable) 메서드에서 예외가 발생하면 ObjectMessage 생성되지 않습니다. 마찬가지로, ObjectMessage.setObject(Serializable) 메소드에서 JMSException이 발생하면 오브젝트가 ObjectMessage에 추가되지 않습니다.
  • 애플리케이션에서 ObjectMessage를 수신하면 ObjectMessage.getObject() 메소드를 호출하여 여기에 포함된 오브젝트를 가져옵니다. 이 메서드가 호출되면 IBM MQ classes for JMS 오브젝트 ObjectMessage, 내에 포함된 오브젝트의 유형을 확인하여 해당 오브젝트가 허용 목록에 지정된 유형인지 확인합니다.
    이 경우 오브젝트가 직렬화 해제되고 애플리케이션으로 반환됩니다. 그러나 오브젝트가 허용 목록에 없는 유형인 경우 IBM MQ classes for JMS 는 다음 메시지를 포함하는 JMSException을 처리합니다.
    JMSCC0053: An exception occurred while deserializing a message: 
    'java.io.InvalidClassException: <object class>; The class may not be 
    serialized or deserialized as it has not been included in the 
    허용 목록 '< allowlist>'. '.
    애플리케이션에서 해당 예외가 다시 발행됩니다.
예를 들어, 애플리케이션이 java.net.URI 유형의 오브젝트를 포함하는 ObjectMessage를 전송하기 위해 다음 코드를 포함하고 있다고 가정합니다.
java.net.URL testURL = new java.net.URL("https://www.ibm.com/");
ObjectMessage msg = session.createObjectMessage(testURL);
sender.send(msg);
허용 목록을 사용할 수 없으면 애플리케이션은 필요한 목적지로 메시지를 넣을 수 있습니다.
단일 항목 java.net.URL를 포함하는 C:\allowlist.txt 라는 파일을 작성하고 Java 시스템 특성 세트를 사용하여 애플리케이션을 다시 시작하는 경우:
-Dcom.ibm.mq.jms.allowlist=file:/C:/allowlist.txt
허용 목록 기능이 사용 가능합니다. 해당 유형이 허용 목록에 지정되어 있으므로 애플리케이션에서 여전히 java.net.URI 유형의 오브젝트를 포함하는 ObjectMessage를 작성하고 전송할 수 있습니다.
하지만 allowlist.txt 파일을 변경하여 파일에 단일 항목 java.util.Calendar를 포함하면 허용 목록 기능이 계속 사용되므로 애플리케이션 호출 시 다음과 같습니다.
ObjectMessage msg = session.createObjectMessage(testURL);
IBM MQ classes for JMS 에서 허용 목록을 확인하고 java.net.URI에 대한 항목이 포함되어 있지 않음을 확인하십시오.

결과적으로 JMSCC0052 메시지를 포함하는 JMSException이 발생합니다.

마찬가지로 이 코드를 사용하는 ObjectMessages를 수신하는 다른 애플리케이션이 있다고 가정합니다.
ObjectMessage message = (ObjectMessage)receiver.receive(30000);
if (message != null) {
    Object messageBody = objectMessage.getObject();
    if (messageBody instanceof java.net.URI) {
      :    :    :    :    :    :    :

허용 목록을 사용할 수 없으면 애플리케이션은 임의의 유형에 해당하는 오브젝트를 포함하는 ObjectMessage를 수신할 수 있습니다. 그런 다음, 적절한 처리를 수행하기 전에 오브젝트 유형이 java.net.URL인지 확인합니다.

이제 Java 시스템 특성을 사용하여 애플리케이션을 시작하는 경우 다음을 수행하십시오.
-Dcom.ibm.mq.jms.allowlist=java.net.URL
허용 목록 기능이 켜집니다. 애플리케이션이 호출되면:
Object messageBody = objectMessage.getObject();
ObjectMessage.getObject() 메소드는 java.net.URL 유형의 오브젝트만 반환합니다.

ObjectMessage에 포함된 오브젝트가 이 유형이 아니면 ObjectMessage.getObject() 메소드에서 JMSCC0053 메시지를 포함하는 JMSException이 발생합니다. 그런 다음, 애플리케이션은 메시지에서 수행할 작업을 결정해야 합니다. 예를 들어, 메시지를 해당 큐 관리자의 데드-레터 큐로 이동할 수 있습니다.

ObjectMessage 내 오브젝트가 java.net.URL인 경우에만 보통 애플리케이션에서 리턴합니다.

프로시저

  1. 다음 Java 시스템 속성을 지정한 상태에서 ObjectMessages, 처리하는 애플리케이션을 실행합니다:
    -Dcom.ibm.mq.jms.allowlist.discover=true
    -Dcom.ibm.mq.jms.allowlist=file:/<path to your allowlist file>    
    
    애플리케이션이 실행될 때 IBM MQ classes for JMS 는 애플리케이션이 처리한 오브젝트의 유형을 포함하는 파일을 작성합니다.
  2. 애플리케이션이 일정 기간에 걸쳐 ObjectMessage의 대표 샘플을 처리한 후 중지하십시오.
    이제 허용 목록 파일은 실행 중에 애플리케이션이 처리한 ObjectMessage 내 포함된 오브젝트의 모든 유형을 포함합니다.
    충분한 시간 동안 애플리케이션을 실행한 경우 이 목록에는 애플리케이션이 처리할 가능성이 큰 ObjectMessage 내 포함된 모든 가능한 오브젝트 유형이 포함되어 있습니다.
  3. 다음 시스템 특성을 설정하고 애플리케이션을 재시작하십시오.
    -Dcom.ibm.mq.jms.allowlist=file:/<path to your allowlist file>  
    그러면 허용 목록을 사용할 수 있으며 IBM MQ classes for JMS 가 허용 목록에 없는 유형의 ObjectMessage 를 발견하는 경우 JMSCC0052 또는 JMSCC0053 메시지를 포함하는 JMSException이 발생합니다.