fix: decryptField toPath='/' 시 기존 필드 보존 - mergeAtRoot 연동
toPath='/'일 때 복호화된 텍스트로 body 전체를 교체하던 동작을 JsonPathUtil.mergeAtRoot 를 통해 fromPath 필드만 제거하고 복호화된 JSON을 body에 병합하는 방식으로 수정. - AbstractCryptoFilter.decryptField: return plainText → mergeAtRoot 호출 - JsonPathUtil.mergeAtRoot: 신규 메서드 추가 - InCryptoFilterTest: 4-4 병합 동작 검증 테스트 추가, 4-2 설명 수정 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -169,14 +169,33 @@ class InCryptoFilterTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("4-2. FIELD scope, toPath='/' — 복호화된 텍스트로 body 전체 교체")
|
||||
void testPreFilter_field_decryptToRoot() throws Exception {
|
||||
@DisplayName("4-2. FIELD scope, toPath='/' — 복호화 결과가 비-JSON이면 텍스트 그대로 반환 (fallback)")
|
||||
void testPreFilter_field_decryptToRoot_nonJsonFallback() throws Exception {
|
||||
String body = "{\"enc\":\"" + CIPHER_B64 + "\"}";
|
||||
Properties prop = fieldDecryptProps("/enc", "/");
|
||||
|
||||
Object result = filter.doPreFilter("g", "a", body, prop, mockRequest, mockResponse);
|
||||
|
||||
assertEquals(PLAIN_STR, result, "toPath='/'이면 body 전체가 복호화된 텍스트로 교체되어야 한다");
|
||||
assertEquals(PLAIN_STR, result, "복호화 결과가 JSON 객체가 아니면 텍스트 그대로 반환");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("4-4. FIELD scope, toPath='/' — 복호화된 JSON을 body에 병합 (fromPath 필드 제거)")
|
||||
void testPreFilter_field_decryptToRoot_mergesJson() throws Exception {
|
||||
String decryptedJson = "{\"userId\":\"U001\",\"name\":\"test\"}";
|
||||
when(mockService.decrypt(anyString(), anyMap(), any(), any(byte[].class)))
|
||||
.thenReturn(decryptedJson.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
String body = "{\"encryptedData\":\"" + CIPHER_B64 + "\",\"requestId\":\"REQ001\"}";
|
||||
Properties prop = fieldDecryptProps("/encryptedData", "/");
|
||||
|
||||
Object result = filter.doPreFilter("g", "a", body, prop, mockRequest, mockResponse);
|
||||
|
||||
String r = result.toString();
|
||||
assertFalse(r.contains("encryptedData"), "암호화 필드(encryptedData)는 제거되어야 한다");
|
||||
assertTrue(r.contains("\"requestId\":\"REQ001\""), "원본 body의 다른 필드는 유지되어야 한다");
|
||||
assertTrue(r.contains("\"userId\":\"U001\""), "복호화된 JSON 필드가 병합되어야 한다");
|
||||
assertTrue(r.contains("\"name\":\"test\""), "복호화된 JSON 필드가 병합되어야 한다");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user