Konfigurowanie i korzystanie z listy allowlist JMS
Informacje te informują użytkownika o tym, jak działa lista allowlist i jak można je skonfigurować, korzystając z funkcji zawartych w IBM® MQ classes for JMS w celu wygenerowania pliku allowlist, zawierającego listę typów komunikatów ObjectMessages, które aplikacja może przetwarzać.
Zanim zaczniesz
Tam, gdzie to możliwe, termin lista zaakceptowanych (allowlist) jest stosowany w miejsce terminu biała lista (whitelist).
W przypadku produktu IBM MQ 9.0 i nowszych wersji obejmuje to nazwy właściwości systemowych produktu Java , o których mowa w tym temacie (com.ibm.mq.jms.*). Nie trzeba zmieniać żadnej istniejącej konfiguracji. Dotychczasowe nazwy właściwości systemowych również będą działać.
Przed rozpoczęciem tej czynności należy zapoznać się z przeczytaniem i zrozumieniem opcji Allowlisting concepts .
Informacje o zadaniu
- Gdy aplikacja chce wysłać obiekt ObjectMessage, może on utworzyć go na jeden z dwóch sposobów:
- Metoda session.createObjectMessage (Serializable), przechodząc do obiektu, który ma być zawarty w komunikacie.
- Metoda session.createObjectMessage () służy do tworzenia pustego komunikatu ObjectMessage, a następnie wywoływania obiektu ObjectMessage.setObject (Serializable) w celu zapisania obiektu, który ma zostać wysłany w obrębie obiektu ObjectMessage.
Jeśli zostaną wywołane metody Session.createObjectMessage (Serializable) lub ObjectMessage.setObject (Serializable), klasy dla usługi JMS sprawdzają, czy przekazany obiekt jest typu, który jest wymieniony na liście allowlist.
Jeśli jest to typ wymieniony, obiekt jest przekształcany do postaci szeregowej i zapisywany w komunikacie ObjectMessage. Jeśli jednak obiekt jest typu, którego nie ma na liście allowlist, IBM MQ classes for JMS zgłasza wyjątek JMSException zawierający komunikat:JMSCC0052: Wystąpił wyjątek podczas serializowania obiektu: ' java.io.InvalidClassException: < klasa_obiektu>; Klasa nie może być serializowana lub z deserializacją, ponieważ nie została uwzględniona na liście allowlist '< allowlist>'.
z powrotem do aplikacji.Ważne: Jeśli wyjątek jest zgłaszany z metody Session.createObjectMessage (Serializable), obiekt ObjectMessage nie zostanie utworzony. Podobnie, jeśli wyjątek JMSException jest zgłaszany z metody ObjectMessage.setObject (Serializable), obiekt nie zostanie dodany do obiektu ObjectMessage. - Jeśli aplikacja odbierze obiekt ObjectMessage, wywołuje metodę ObjectMessage.getObject (), aby uzyskać obiekt w nim zawarty. Po wywołaniu tej metody IBM MQ classes for JMS sprawdza typ obiektu zawartego w obiekcie ObjectMessage, aby sprawdzić, czy ten obiekt jest typu określonego na liście allowlist.Jeśli tak, obiekt jest deserializowany i zwracany do aplikacji. Jeśli jednak obiekt jest typu, którego nie ma na liście allowlist, IBM MQ classes for JMS zgłasza wyjątek JMSException zawierający komunikat:
JMSCC0053: Wystąpił wyjątek podczas deserializacji komunikatu: ' java.io.InvalidClassException: < klasa_obiektu>; Klasa może nie być serializowane lub zerializowane, ponieważ nie zostały uwzględnione w allowlist '< allowlist>'. '.
z powrotem do aplikacji.
java.net.URL testURL = new java.net.URL("https://www.ibm.com/");
ObjectMessage msg = session.createObjectMessage(testURL);
sender.send(msg);
Ponieważ opcja allowlisting nie jest włączona, aplikacja jest w stanie pomyślnie umieścić komunikat w wymaganym miejscu docelowym.java.net.URL, a następnie zostanie uruchomiony ponownie aplikację z zestawem właściwości systemu Java:-Dcom.ibm.mq.jms.allowlist=file:/C:/allowlist.txtFunkcja allowlist jest włączona. Aplikacja nadal może utworzyć i wysłać obiekt ObjectMessage zawierający obiekt o typie java.net.URI, ponieważ ten typ jest określony na liście allowlist.java.util.Calendar, ponieważ funkcja listy allowlist jest nadal włączona, podczas wywołań aplikacji:ObjectMessage msg = session.createObjectMessage(testURL);IBM MQ classes for JMS sprawdź listę allowlist i sprawdź, czy nie zawiera ona wpisu dla klasy java.net.URI.W związku z tym zgłaszany jest wyjątek JMSException zawierający komunikat JMSCC0052 .
ObjectMessage message = (ObjectMessage)receiver.receive(30000);
if (message != null) {
Object messageBody = objectMessage.getObject();
if (messageBody instanceof java.net.URI) {
: : : : : : :
Jeśli opcja allowlisting nie jest włączona, aplikacja jest w stanie odbierać komunikaty ObjectMessages zawierające obiekt dowolnego typu. Następnie aplikacja sprawdza, czy obiekt jest typu java.net.URL przed wykonaniem odpowiedniego przetwarzania.
-Dcom.ibm.mq.jms.allowlist=java.net.URLustaw, funkcja allowlistingu jest włączona. Gdy aplikacja wywołuje:Object messageBody = objectMessage.getObject();Metoda ObjectMessage.getObject () zwraca tylko obiekty o typie java.net.URL.Jeśli obiekt znajdujący się w obiekcie ObjectMessage nie jest tego typu, metoda ObjectMessage.getObject () zgłasza wyjątek JMSException zawierający komunikat JMSCC0053 . Następnie aplikacja musi zdecydować, co należy zrobić z komunikatem. Na przykład komunikat może zostać przeniesiony do kolejki niedostarczonych komunikatów dla tego menedżera kolejek.
Aplikacja zwraca tylko normalnie, jeśli obiekt wewnątrz obiektu ObjectMessage ma typ java.net.URL.