INT-4342: White List for Payload Deserializer
JIRA: https://jira.spring.io/browse/INT-4342 Use similar code to Spring AMQP to add white list support for Integration's use of the `DeserializingMessageConverter`; introduce the `WhiteListDeserializingMessageConverter`. Polishing Missed this change in PR. Fix XSD attribute # Conflicts: # spring-integration-core/src/main/java/org/springframework/integration/dsl/Transformers.java # spring-integration-core/src/test/java/org/springframework/integration/config/xml/PayloadDeserializingTransformerParserTests.java # spring-integration-core/src/test/java/org/springframework/integration/dsl/flows/IntegrationFlowTests.java # spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcChannelMessageStore.java # spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/channel/MessageRowMapper.java # spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java # spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/support/BinaryToMessageConverter.java # spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/support/MongoDbMessageBytesConverter.java
This commit is contained in:
committed by
Artem Bilan
parent
08bc97180c
commit
694d190bd2
@@ -33,7 +33,6 @@ import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.serializer.support.DeserializingConverter;
|
||||
import org.springframework.core.serializer.support.SerializingConverter;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Transient;
|
||||
@@ -63,6 +62,7 @@ import org.springframework.integration.store.MessageStore;
|
||||
import org.springframework.integration.store.SimpleMessageGroup;
|
||||
import org.springframework.integration.support.MutableMessage;
|
||||
import org.springframework.integration.support.MutableMessageBuilder;
|
||||
import org.springframework.integration.support.converter.WhiteListDeserializingConverter;
|
||||
import org.springframework.jmx.export.annotation.ManagedAttribute;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHeaders;
|
||||
@@ -133,6 +133,8 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore
|
||||
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
private String[] whiteListPatterns;
|
||||
|
||||
|
||||
/**
|
||||
* Create a MongoDbMessageStore using the provided {@link MongoDbFactory}.and the default collection name.
|
||||
@@ -166,6 +168,16 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add patterns for packages/classes that are allowed to be deserialized. A class can
|
||||
* be fully qualified or a wildcard '*' is allowed at the beginning or end of the
|
||||
* class name. Examples: {@code com.foo.*}, {@code *.MyClass}.
|
||||
* @param patterns the patterns.
|
||||
*/
|
||||
public void addWhiteListPatterns(String... patterns) {
|
||||
this.whiteListPatterns = patterns;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
if (this.applicationContext != null) {
|
||||
@@ -497,7 +509,12 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore
|
||||
customConverters.add(new MessageHistoryToDBObjectConverter());
|
||||
customConverters.add(new DBObjectToGenericMessageConverter());
|
||||
customConverters.add(new DBObjectToMutableMessageConverter());
|
||||
customConverters.add(new DBObjectToErrorMessageConverter());
|
||||
DBObjectToErrorMessageConverter docToErrorMessageConverter = new DBObjectToErrorMessageConverter();
|
||||
if (MongoDbMessageStore.this.whiteListPatterns != null) {
|
||||
docToErrorMessageConverter.deserializingConverter
|
||||
.addWhiteListPatterns(MongoDbMessageStore.this.whiteListPatterns);
|
||||
}
|
||||
customConverters.add(docToErrorMessageConverter);
|
||||
customConverters.add(new DBObjectToAdviceMessageConverter());
|
||||
customConverters.add(new ThrowableToBytesConverter());
|
||||
this.setCustomConversions(new CustomConversions(customConverters));
|
||||
@@ -717,7 +734,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore
|
||||
|
||||
private class DBObjectToErrorMessageConverter implements Converter<DBObject, ErrorMessage> {
|
||||
|
||||
private final Converter<byte[], Object> deserializingConverter = new DeserializingConverter();
|
||||
private final WhiteListDeserializingConverter deserializingConverter = new WhiteListDeserializingConverter();
|
||||
|
||||
@Override
|
||||
public ErrorMessage convert(DBObject source) {
|
||||
|
||||
@@ -22,8 +22,8 @@ import java.util.Set;
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.convert.converter.GenericConverter;
|
||||
import org.springframework.core.serializer.support.DeserializingConverter;
|
||||
import org.springframework.core.serializer.support.SerializingConverter;
|
||||
import org.springframework.integration.support.converter.WhiteListDeserializingConverter;
|
||||
import org.springframework.messaging.Message;
|
||||
|
||||
/**
|
||||
@@ -32,13 +32,14 @@ import org.springframework.messaging.Message;
|
||||
* And vice versa - to convert {@link byte[]} from the MongoDB to the {@link Message}.
|
||||
|
||||
* @author Artem Bilan
|
||||
* @author Gary Russell
|
||||
* @since 4.2.10
|
||||
*/
|
||||
public class MongoDbMessageBytesConverter implements GenericConverter {
|
||||
|
||||
private final Converter<Object, byte[]> serializingConverter = new SerializingConverter();
|
||||
|
||||
private final Converter<byte[], Object> deserializingConverter = new DeserializingConverter();
|
||||
private final WhiteListDeserializingConverter deserializingConverter = new WhiteListDeserializingConverter();
|
||||
|
||||
@Override
|
||||
public Set<ConvertiblePair> getConvertibleTypes() {
|
||||
@@ -58,4 +59,14 @@ public class MongoDbMessageBytesConverter implements GenericConverter {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add patterns for packages/classes that are allowed to be deserialized. A class can
|
||||
* be fully qualified or a wildcard '*' is allowed at the beginning or end of the
|
||||
* class name. Examples: {@code com.foo.*}, {@code *.MyClass}.
|
||||
* @param patterns the patterns.
|
||||
*/
|
||||
public void addWhiteListPatterns(String... patterns) {
|
||||
this.deserializingConverter.addWhiteListPatterns(patterns);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user