Skip to content

Commit e3868dc

Browse files
garyrussellartembilan
authored andcommitted
GH-1385: JsonDeserializer - trim trusted packages
Resolves #1385 When configuring the trusted packages from consumer properties, trim whitespace characters.
1 parent e292987 commit e3868dc

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

spring-kafka/src/main/java/org/springframework/kafka/support/serializer/JsonDeserializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2015-2019 the original author or authors.
2+
* Copyright 2015-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -331,7 +331,7 @@ public void configure(Map<String, ?> configs, boolean isKey) {
331331
if (configs.containsKey(TRUSTED_PACKAGES)
332332
&& configs.get(TRUSTED_PACKAGES) instanceof String) {
333333
this.typeMapper.addTrustedPackages(
334-
StringUtils.commaDelimitedListToStringArray((String) configs.get(TRUSTED_PACKAGES)));
334+
StringUtils.delimitedListToStringArray((String) configs.get(TRUSTED_PACKAGES), ",", " \r\n\f\t"));
335335
}
336336
if (configs.containsKey(TYPE_MAPPINGS) && !this.typeMapperExplicitlySet
337337
&& this.typeMapper instanceof AbstractJavaTypeMapper) {

spring-kafka/src/test/java/org/springframework/kafka/support/serializer/JsonSerializationTests.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016-2019 the original author or authors.
2+
* Copyright 2016-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -24,6 +24,8 @@
2424
import java.util.Collections;
2525
import java.util.HashMap;
2626
import java.util.List;
27+
import java.util.Map;
28+
import java.util.Set;
2729

2830
import org.apache.kafka.common.errors.SerializationException;
2931
import org.apache.kafka.common.header.Headers;
@@ -73,7 +75,7 @@ public class JsonSerializationTests {
7375
private String topic;
7476

7577
@BeforeEach
76-
public void init() {
78+
void init() {
7779
entity = new DummyEntity();
7880
entity.intValue = 19;
7981
entity.longValue = 7L;
@@ -108,7 +110,7 @@ public void init() {
108110
* 3. Check the result with the source entity.
109111
*/
110112
@Test
111-
public void testDeserializeSerializedEntityEquals() {
113+
void testDeserializeSerializedEntityEquals() {
112114
assertThat(jsonReader.deserialize(topic, jsonWriter.serialize(topic, entity))).isEqualTo(entity);
113115
Headers headers = new RecordHeaders();
114116
headers.add(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, DummyEntity.class.getName().getBytes());
@@ -121,7 +123,7 @@ public void testDeserializeSerializedEntityEquals() {
121123
* 3. Check the result with the source entity array.
122124
*/
123125
@Test
124-
public void testDeserializeSerializedEntityArrayEquals() {
126+
void testDeserializeSerializedEntityArrayEquals() {
125127
assertThat(jsonArrayReader.deserialize(topic, jsonWriter.serialize(topic, entityArray))).isEqualTo(entityArray);
126128
Headers headers = new RecordHeaders();
127129
headers.add(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, DummyEntity[].class.getName().getBytes());
@@ -134,7 +136,7 @@ public void testDeserializeSerializedEntityArrayEquals() {
134136
* 3. Fails with SerializationException.
135137
*/
136138
@Test
137-
public void testDeserializeSerializedDummyException() {
139+
void testDeserializeSerializedDummyException() {
138140
assertThatExceptionOfType(SerializationException.class)
139141
.isThrownBy(() -> jsonReader.deserialize(topic, stringWriter.serialize(topic, "dummy")))
140142
.withMessageStartingWith("Can't deserialize data [")
@@ -149,35 +151,35 @@ public void testDeserializeSerializedDummyException() {
149151
}
150152

151153
@Test
152-
public void testSerializedStringNullEqualsNull() {
154+
void testSerializedStringNullEqualsNull() {
153155
assertThat(stringWriter.serialize(topic, null)).isEqualTo(null);
154156
}
155157

156158
@Test
157-
public void testSerializedJsonNullEqualsNull() {
159+
void testSerializedJsonNullEqualsNull() {
158160
assertThat(jsonWriter.serialize(topic, null)).isEqualTo(null);
159161
}
160162

161163
@Test
162-
public void testDeserializedStringNullEqualsNull() {
164+
void testDeserializedStringNullEqualsNull() {
163165
assertThat(stringReader.deserialize(topic, null)).isEqualTo(null);
164166
}
165167

166168
@Test
167-
public void testDeserializedJsonNullEqualsNull() {
169+
void testDeserializedJsonNullEqualsNull() {
168170
assertThat(jsonReader.deserialize(topic, null)).isEqualTo(null);
169171
}
170172

171173
@Test
172-
public void testExtraFieldIgnored() {
174+
void testExtraFieldIgnored() {
173175
JsonDeserializer<DummyEntity> deser = new JsonDeserializer<>(DummyEntity.class);
174176
assertThat(deser.deserialize(topic, "{\"intValue\":1,\"extra\":2}".getBytes()))
175177
.isInstanceOf(DummyEntity.class);
176178
deser.close();
177179
}
178180

179181
@Test
180-
public void testDeserTypeHeadersConfig() {
182+
void testDeserTypeHeadersConfig() {
181183
this.jsonReader.configure(Collections.singletonMap(JsonDeserializer.USE_TYPE_INFO_HEADERS, false), false);
182184
assertThat(KafkaTestUtils.getPropertyValue(this.jsonReader, "typeMapper.typePrecedence"))
183185
.isEqualTo(TypePrecedence.INFERRED);
@@ -198,7 +200,7 @@ public void testDeserTypeHeadersConfig() {
198200
}
199201

200202
@Test
201-
public void testDeserializerTypeInference() {
203+
void testDeserializerTypeInference() {
202204
JsonSerializer<List<String>> ser = new JsonSerializer<>();
203205
JsonDeserializer<List<String>> de = new JsonDeserializer<>(List.class);
204206
List<String> dummy = Arrays.asList("foo", "bar", "baz");
@@ -208,7 +210,7 @@ public void testDeserializerTypeInference() {
208210
}
209211

210212
@Test
211-
public void testDeserializerTypeReference() {
213+
void testDeserializerTypeReference() {
212214
JsonSerializer<List<DummyEntity>> ser = new JsonSerializer<>();
213215
JsonDeserializer<List<DummyEntity>> de = new JsonDeserializer<>(new TypeReference<List<DummyEntity>>() { });
214216
List<DummyEntity> dummy = Arrays.asList(this.entityArray);
@@ -218,7 +220,7 @@ public void testDeserializerTypeReference() {
218220
}
219221

220222
@Test
221-
public void testPreExistingHeaders() {
223+
void testPreExistingHeaders() {
222224
JsonSerializer<? super Foo> ser = new JsonSerializer<>();
223225
Headers headers = new RecordHeaders();
224226
ser.serialize("", headers, new Foo());
@@ -233,7 +235,7 @@ public void testPreExistingHeaders() {
233235
}
234236

235237
@Test
236-
public void testDontUseTypeHeaders() {
238+
void testDontUseTypeHeaders() {
237239
JsonSerializer<? super Foo> ser = new JsonSerializer<>();
238240
Headers headers = new RecordHeaders();
239241
byte[] data = ser.serialize("", headers, new Bar());
@@ -247,6 +249,16 @@ public void testDontUseTypeHeaders() {
247249
deser.close();
248250
}
249251

252+
@SuppressWarnings("unchecked")
253+
@Test
254+
void testParseTrustedPackages() {
255+
JsonDeserializer<Object> deser = new JsonDeserializer<>();
256+
Map<String, Object> props = Collections.singletonMap(JsonDeserializer.TRUSTED_PACKAGES, "foo, bar, \tbaz");
257+
deser.configure(props, false);
258+
assertThat(KafkaTestUtils.getPropertyValue(deser, "typeMapper.trustedPackages", Set.class))
259+
.contains("foo", "bar", "baz");
260+
}
261+
250262
static class DummyEntityJsonDeserializer extends JsonDeserializer<DummyEntity> {
251263

252264
}

0 commit comments

Comments
 (0)