현재 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 되는 로그처리를 하기위해 사용하기도 한다.
'개발경험 및 메모 > Spring & Java' 카테고리의 다른 글
getOutputStream() has already been called for this response (0) | 2023.10.12 |
---|---|
Springboot 1.5.19 -> 2.1.4 업데이트 마이그레이션 (0) | 2020.09.18 |
There is no PasswordEncoder mapped for the id null 에러 (0) | 2020.09.14 |
Springboot2 session 설정 (0) | 2020.08.24 |
SpringBoot2 JSP 실시간 적용방법 (0) | 2020.08.24 |
최근댓글