현재 API SERVER 에서 Spring에서 제공하는 JWT Token을 발급한다. 

 

그런데.. 특정 client에서 무분별하게 Token 을 너무 자주 발급을 하여

 

이것을 로그로 남기고 싶었다. 

 

어떤 client가 Token발급을 하며, 어떤 Token을 Response를 하지는 확인이 필요하였다.

 

ContentCachingRequestWrapper

ContentCachingResponseWrapper

클래스를 사용하여 request body와 Response body 데이타를 캐치하여 로그를 남길 수가 있다.

 

public class ApiFilter implements Filter {
	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
	
		String requestUri = ((HttpServletRequest) req).getRequestURI().toString();
		
		// Token 발행 URL
		if(requestUri.equals("/oauth/token")){
			ContentCachingRequestWrapper request = new ContentCachingRequestWrapper((HttpServletRequest)req);
			ContentCachingResponseWrapper response = new ContentCachingResponseWrapper((HttpServletResponse) res);
		
			chain.doFilter(request, response);

			String client_id = authentication.getName();
			ObjectMapper om = new ObjectMapper();
			JsonNode responseJson = om.readTree(response.getContentAsByteArray());

			// 토큰발급 로그저장 서비스 호출
			logService.insertTokenIssueLog(client_id, responseJson);
		
			// 이부분은 꼭 해주어야함.. 안해줄 경우 client가 응답을 못받음
			response.copyBodyToResponse();
		}
	}
}

 

 

현 시스템에서는 토큰발급 로그처리를 위하여 사용했지만, 

필요용도에 따라  request 및 response 되는 로그처리를 하기위해 사용하기도 한다.

 


 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기