diff --git a/src/main/java/com/eactive/apim/portal/apps/apis/filter/ApiTesterFilter.java b/src/main/java/com/eactive/apim/portal/apps/apis/filter/ApiTesterFilter.java index 473792b..31f1574 100644 --- a/src/main/java/com/eactive/apim/portal/apps/apis/filter/ApiTesterFilter.java +++ b/src/main/java/com/eactive/apim/portal/apps/apis/filter/ApiTesterFilter.java @@ -56,97 +56,99 @@ public class ApiTesterFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; - if (httpServletRequest.getRequestURI().contains("/api/call-api")) { - ApiService apiSpecInfoDtoService = ApplicationContextUtil.getContext().getBean(ApiService.class); - String url = httpServletRequest.getHeader("original-url"); + // "/api/call-api" 경로가 아닌 경우 필터링하지 않고 다음 필터로 넘어감 + if (!httpServletRequest.getRequestURI().contains("/api/call-api")) { + chain.doFilter(request, response); + return; + } - if (url.contains("/api/v1/oauth/token")){ - StringBuilder sb = new StringBuilder(); - BufferedReader reader = httpServletRequest.getReader(); - String line; - while ((line = reader.readLine()) != null) { - sb.append(line); - } - String body = sb.toString(); + ApiService apiSpecInfoDtoService = ApplicationContextUtil.getContext().getBean(ApiService.class); + String url = httpServletRequest.getHeader("original-url"); - // Parse request parameters - Map params = new HashMap<>(); - String[] pairs = body.split("&"); - for (String pair : pairs) { - String[] keyValue = pair.split("="); - if (keyValue.length == 2) { - params.put(keyValue[0], keyValue[1]); - } - } - String scope = params.getOrDefault("scope", "default"); + if (url.contains("/api/v1/oauth/token")){ + StringBuilder sb = new StringBuilder(); + BufferedReader reader = httpServletRequest.getReader(); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + String body = sb.toString(); - String token = "{\n" + - " \"access_token\": \"kjbank_gw_sample_token\",\n" + - " \"token_type\": \"bearer\",\n" + - " \"expires_in\": 86400,\n" + - " \"scope\": \""+scope +"\",\n" + - " \"jti\": \""+ UUID.randomUUID().toString()+"\"\n" + - "}"; - - response.setContentType("application/json"); - response.getWriter().println(token); - - } else { - ApiSpecInfoDto apiSpecInfoDto = apiSpecInfoDtoService.selectDetailByURLAndMethod(parseUri(url), httpServletRequest.getMethod()); - - if (apiSpecInfoDto.getResponseType() == null || apiSpecInfoDto.getResponseType().equals("sample")) { - response.setContentType("application/json"); - response.getWriter().println(apiSpecInfoDto.getSampleResponse()); - } else { - String mockUrl = apiSpecInfoDto.getMockUrl(); - String method = apiSpecInfoDto.getApiMethod(); - Enumeration headerNames = httpServletRequest.getHeaderNames(); - - Map headers = new HashMap<>(); - while (headerNames.hasMoreElements()) { - String header = headerNames.nextElement(); - headers.put(header, httpServletRequest.getHeader(header)); - } - Map paramMap = new HashMap<>(); - - String originalUrl = headers.get("original-url"); - //sprlit original url with ? get the second part then split with & put into paramMap - - String[] originalUrlArr = originalUrl.split("\\?"); - if (originalUrlArr.length > 1) { - String[] paramArr = originalUrlArr[1].split("&"); - for (String param : paramArr) { - String[] paramKeyValue = param.split("="); - if (paramKeyValue.length > 1) { - paramMap.put(paramKeyValue[0], new String[]{paramKeyValue[1]}); - } - } - } - - headers.remove("original-url"); - headers.remove("original-api-id"); - APISender apiSender = ApplicationContextUtil.getContext().getBean(APISender.class); - - String responseStr = ""; - if (method.equalsIgnoreCase("post")) { - StringBuilder sb = new StringBuilder(); - BufferedReader reader = httpServletRequest.getReader(); - String line; - while ((line = reader.readLine()) != null) { - sb.append(line); - } - String body = sb.toString(); - responseStr = apiSender.requestPost(mockUrl, headers, paramMap, body); - - } else { - responseStr = apiSender.requestGet(mockUrl, headers, paramMap); - } - response.setContentType("application/json"); - response.getWriter().println(responseStr); + // Parse request parameters + Map params = new HashMap<>(); + String[] pairs = body.split("&"); + for (String pair : pairs) { + String[] keyValue = pair.split("="); + if (keyValue.length == 2) { + params.put(keyValue[0], keyValue[1]); } } + String scope = params.getOrDefault("scope", "default"); + + String token = "{\n" + + " \"access_token\": \"djbank_gw_sample_token\",\n" + + " \"token_type\": \"bearer\",\n" + + " \"expires_in\": 86400,\n" + + " \"scope\": \""+scope +"\",\n" + + " \"jti\": \""+ UUID.randomUUID().toString()+"\"\n" + + "}"; + + response.setContentType("application/json"); + response.getWriter().println(token); + } else { - chain.doFilter(request, response); + ApiSpecInfoDto apiSpecInfoDto = apiSpecInfoDtoService.selectDetailByURLAndMethod(parseUri(url), httpServletRequest.getMethod()); + + if (apiSpecInfoDto.getResponseType() == null || apiSpecInfoDto.getResponseType().equals("sample")) { + response.setContentType("application/json"); + response.getWriter().println(apiSpecInfoDto.getSampleResponse()); + } else { + String mockUrl = apiSpecInfoDto.getMockUrl(); + String method = apiSpecInfoDto.getApiMethod(); + Enumeration headerNames = httpServletRequest.getHeaderNames(); + + Map headers = new HashMap<>(); + while (headerNames.hasMoreElements()) { + String header = headerNames.nextElement(); + headers.put(header, httpServletRequest.getHeader(header)); + } + Map paramMap = new HashMap<>(); + + String originalUrl = headers.get("original-url"); + //sprlit original url with ? get the second part then split with & put into paramMap + + String[] originalUrlArr = originalUrl.split("\\?"); + if (originalUrlArr.length > 1) { + String[] paramArr = originalUrlArr[1].split("&"); + for (String param : paramArr) { + String[] paramKeyValue = param.split("="); + if (paramKeyValue.length > 1) { + paramMap.put(paramKeyValue[0], new String[]{paramKeyValue[1]}); + } + } + } + + headers.remove("original-url"); + headers.remove("original-api-id"); + APISender apiSender = ApplicationContextUtil.getContext().getBean(APISender.class); + + String responseStr = ""; + if (method.equalsIgnoreCase("post")) { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = httpServletRequest.getReader(); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + String body = sb.toString(); + responseStr = apiSender.requestPost(mockUrl, headers, paramMap, body); + + } else { + responseStr = apiSender.requestGet(mockUrl, headers, paramMap); + } + response.setContentType("application/json"); + response.getWriter().println(responseStr); + } } }