[ https://issues.apache.org/jira/browse/ARTEMIS-604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15382552#comment-15382552 ]
ASF GitHub Bot commented on ARTEMIS-604: ---------------------------------------- Github user mtaylor commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/632#discussion_r71182493 --- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/ObjectInputStreamWithClassLoader.java --- @@ -25,23 +25,110 @@ import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; public class ObjectInputStreamWithClassLoader extends ObjectInputStream { // Constants ------------------------------------------------------------------------------------ + /** + * Value used to indicate that all classes should be white or black listed, + */ + public static final String CATCH_ALL_WILDCARD = "*"; + + public static final String WHITELIST_PROPERTY = "org.apache.activemq.artemis.jms.deserialization.whitelist"; + public static final String BLACKLIST_PROPERTY = "org.apache.activemq.artemis.jms.deserialization.blacklist"; + // Attributes ----------------------------------------------------------------------------------- + private List<String> whiteList = new ArrayList<>(); + private List<String> blackList = new ArrayList<>(); + // Static --------------------------------------------------------------------------------------- // Constructors --------------------------------------------------------------------------------- public ObjectInputStreamWithClassLoader(final InputStream in) throws IOException { super(in); + String whiteList = System.getProperty(WHITELIST_PROPERTY, null); + setWhiteList(whiteList); + + String blackList = System.getProperty(BLACKLIST_PROPERTY, null); + setBlackList(blackList); } // Public --------------------------------------------------------------------------------------- + /** + * @return the whiteList configured on this policy instance. + */ + public String getWhiteList() { + Iterator<String> entries = whiteList.iterator(); + StringBuilder builder = new StringBuilder(); + + while (entries.hasNext()) { + builder.append(entries.next()); + if (entries.hasNext()) { + builder.append(","); + } + } + return builder.toString(); + } + + /** + * @return the blackList configured on this policy instance. + */ + public String getBlackList() { + Iterator<String> entries = blackList.iterator(); + StringBuilder builder = new StringBuilder(); + + while (entries.hasNext()) { + builder.append(entries.next()); + if (entries.hasNext()) { + builder.append(","); + } + } + + return builder.toString(); + } + + /** + * Replaces the currently configured whiteList with a comma separated + * string containing the new whiteList. Null or empty string denotes + * no whiteList entries, {@value #CATCH_ALL_WILDCARD} indicates that + * all classes are whiteListed. + * + * @param whiteList the whiteList that this policy is configured to recognize. + */ + public void setWhiteList(String whiteList) { + ArrayList<String> list = new ArrayList<>(); + if (whiteList != null && !whiteList.isEmpty()) { + list.addAll(Arrays.asList(whiteList.split(","))); + } + + this.whiteList = list; + } + + /** + * Replaces the currently configured blackList with a comma separated + * string containing the new blackList. Null or empty string denotes + * no blacklist entries, {@value #CATCH_ALL_WILDCARD} indicates that + * all classes are blacklisted. + * + * @param blackList the blackList that this policy is configured to recognize. + */ + public void setBlackList(String blackList) { + ArrayList<String> list = new ArrayList<>(); + if (blackList != null && !blackList.isEmpty()) { + list.addAll(Arrays.asList(blackList.split(","))); + } + + this.blackList = list; + } + --- End diff -- Same comment as above. You could move the list validation and parse into a separation method to avoid duplication. > Message Serialization Improvement > --------------------------------- > > Key: ARTEMIS-604 > URL: https://issues.apache.org/jira/browse/ARTEMIS-604 > Project: ActiveMQ Artemis > Issue Type: Improvement > Components: Broker > Affects Versions: 1.3.0 > Reporter: Howard Gao > Assignee: Howard Gao > Fix For: 1.4.0 > > -- This message was sent by Atlassian JIRA (v6.3.4#6332)