5
5
import com .fasterxml .jackson .databind .node .ContainerNode ;
6
6
import com .fasterxml .jackson .databind .node .ObjectNode ;
7
7
import com .fasterxml .jackson .databind .node .TextNode ;
8
- import com . google . common . base . Preconditions ;
8
+ import java . util . Set ;
9
9
10
10
class Replace extends MaskingPolicy {
11
11
12
- static final String DEFAULT_REPLACEMENT = "***DATA_MASKED***" ;
13
-
14
12
private final String replacement ;
15
13
16
- Replace (FieldsSelector fieldsSelector , String replacementString ) {
14
+ static final String DEFAULT_REPLACEMENT = "ANONYMIZED" ;
15
+
16
+ Replace (FieldsSelector fieldsSelector , String replacement ) {
17
17
super (fieldsSelector );
18
- this .replacement = Preconditions . checkNotNull ( replacementString ) ;
18
+ this .replacement = replacement ;
19
19
}
20
20
21
21
@ Override
@@ -24,42 +24,29 @@ public String applyToString(String str) {
24
24
}
25
25
26
26
@ Override
27
- public ContainerNode <?> applyToJsonContainer (ContainerNode <?> node ) {
28
- return (ContainerNode <?>) replaceWithFieldsCheck (node );
27
+ public ContainerNode <?> applyToJsonContainer (ContainerNode <?> node , Set < String > maskedFields ) {
28
+ return (ContainerNode <?>) replaceFields (node , maskedFields );
29
29
}
30
30
31
- private JsonNode replaceWithFieldsCheck (JsonNode node ) {
31
+ private JsonNode replaceFields (JsonNode node , Set < String > maskedFields ) {
32
32
if (node .isObject ()) {
33
33
ObjectNode obj = ((ObjectNode ) node ).objectNode ();
34
34
node .fields ().forEachRemaining (f -> {
35
35
String fieldName = f .getKey ();
36
36
JsonNode fieldVal = f .getValue ();
37
37
if (fieldShouldBeMasked (fieldName )) {
38
- obj .set (fieldName , replaceRecursive (fieldVal ));
38
+ maskedFields .add (fieldName ); // ✅ track replaced field
39
+ obj .set (fieldName , new TextNode (replacement ));
39
40
} else {
40
- obj .set (fieldName , replaceWithFieldsCheck (fieldVal ));
41
+ obj .set (fieldName , replaceFields (fieldVal , maskedFields ));
41
42
}
42
43
});
43
44
return obj ;
44
45
} else if (node .isArray ()) {
45
46
ArrayNode arr = ((ArrayNode ) node ).arrayNode (node .size ());
46
- node .elements ().forEachRemaining (e -> arr .add (replaceWithFieldsCheck ( e )));
47
+ node .elements ().forEachRemaining (e -> arr .add (replaceFields ( e , maskedFields )));
47
48
return arr ;
48
49
}
49
- // if it is not an object or array - we have nothing to replace here
50
50
return node ;
51
51
}
52
-
53
- private JsonNode replaceRecursive (JsonNode node ) {
54
- if (node .isObject ()) {
55
- ObjectNode obj = ((ObjectNode ) node ).objectNode ();
56
- node .fields ().forEachRemaining (f -> obj .set (f .getKey (), replaceRecursive (f .getValue ())));
57
- return obj ;
58
- } else if (node .isArray ()) {
59
- ArrayNode arr = ((ArrayNode ) node ).arrayNode (node .size ());
60
- node .elements ().forEachRemaining (e -> arr .add (replaceRecursive (e )));
61
- return arr ;
62
- }
63
- return new TextNode (replacement );
64
- }
65
52
}
0 commit comments