카카오페이 isagreed 필드 체크 로직 필터 개발

This commit is contained in:
curry772
2026-06-25 09:57:52 +09:00
parent 704a9ff90e
commit f72348ae67
2 changed files with 153 additions and 0 deletions
@@ -0,0 +1,45 @@
package com.eactive.eai.custom.adapter.http.dynamic.filter;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.eactive.eai.adapter.http.dynamic.filter.FilterException;
import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter;
import com.eactive.eai.common.util.JacksonUtil;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* 카카오뱅크 암복호화에 맟추어 커스텀 필요
*/
public class KakaopayFilter implements HttpAdapterFilter {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override
public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop,
HttpServletRequest request, HttpServletResponse response) throws Exception {
JsonNode rootNode = JacksonUtil.readTree(message, OBJECT_MAPPER);
// term_agreements[0].is_agreed 값이 true 인지 확인
boolean firstAgreed = JacksonUtil.getBoolean(rootNode, "term_agreements[0].is_agreed", false);
if (!firstAgreed) {
throw new FilterException("EB000003", "금리한도조회실패 - 고객 요청으로 인한 CB 조회 실패", 200);
}
return message;
}
@Override
public Object doPostFilter(String adptGrpName, String adptName, Object resultMessage, Properties prop,
HttpServletRequest request, HttpServletResponse response) throws Exception {
return resultMessage;
}
}
@@ -0,0 +1,108 @@
package com.eactive.eai.custom.adapter.http.dynamic.filter;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.eactive.eai.adapter.http.dynamic.filter.FilterException;
class KakaopayFilterTest {
private KakaopayFilter filter;
@BeforeEach
void setUp() {
filter = new KakaopayFilter();
}
// -----------------------------------------------------------------------
// doPreFilter
// -----------------------------------------------------------------------
@Test
void preFilter_firstAgreedTrue_returnsMessage() throws Exception {
String message = "{\"term_agreements\":[{\"is_agreed\":true}]}";
Object result = filter.doPreFilter(null, null, message, null, null, null);
assertSame(message, result);
}
@Test
void preFilter_firstAgreedFalse_throwsFilterException() throws Exception {
String message = "{\"term_agreements\":[{\"is_agreed\":false}]}";
FilterException ex = assertThrows(FilterException.class,
() -> filter.doPreFilter(null, null, message, null, null, null));
assertEquals("EB000003", ex.getMessage());
assertEquals(200, ex.getStatus());
}
@Test
void preFilter_isAgreedFieldMissing_throwsFilterException() {
// is_agreed 필드 없음 → getBoolean 기본값 false → 예외
String message = "{\"term_agreements\":[{}]}";
assertThrows(FilterException.class,
() -> filter.doPreFilter(null, null, message, null, null, null));
}
@Test
void preFilter_termAgreementsEmpty_throwsFilterException() {
// 배열이 비어있어 [0] 접근 불가 → getBoolean 기본값 false → 예외
String message = "{\"term_agreements\":[]}";
assertThrows(FilterException.class,
() -> filter.doPreFilter(null, null, message, null, null, null));
}
@Test
void preFilter_termAgreementsMissing_throwsFilterException() {
// term_agreements 필드 자체 없음 → getBoolean 기본값 false → 예외
String message = "{}";
assertThrows(FilterException.class,
() -> filter.doPreFilter(null, null, message, null, null, null));
}
@Test
void preFilter_multipleEntries_firstAgreedTrue_returnsMessage() throws Exception {
// 첫 번째 true, 두 번째 false → 통과
String message = "{\"term_agreements\":["
+ "{\"is_agreed\":true},"
+ "{\"is_agreed\":false}"
+ "]}";
Object result = filter.doPreFilter(null, null, message, null, null, null);
assertSame(message, result);
}
@Test
void preFilter_multipleEntries_firstAgreedFalse_throwsFilterException() {
// 첫 번째 false, 두 번째 true → 예외
String message = "{\"term_agreements\":["
+ "{\"is_agreed\":false},"
+ "{\"is_agreed\":true}"
+ "]}";
assertThrows(FilterException.class,
() -> filter.doPreFilter(null, null, message, null, null, null));
}
// -----------------------------------------------------------------------
// doPostFilter
// -----------------------------------------------------------------------
@Test
void postFilter_alwaysReturnsResultMessage() throws Exception {
String resultMessage = "{\"result\":\"ok\"}";
Object result = filter.doPostFilter(null, null, resultMessage, null, null, null);
assertSame(resultMessage, result);
}
}