
Filter 란?
Dispatcher Servlet 에 요청이 전달되기 전,후 해당 URL 패턴에 맞는 모든 요청에 대하여 부가적인 검증을 할 수 있도록 하는 것
아래 코드는 Filter 적용 예시 코드
@Slf4j
@Component
public class LoggerFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
ContentCachingRequestWrapper req = new ContentCachingRequestWrapper((HttpServletRequest) request);
ContentCachingResponseWrapper res = new ContentCachingResponseWrapper((HttpServletResponse) response);
chain.doFilter(req, res);
String uri = req.getRequestURI();
String method = req.getMethod();
Enumeration<String> headerNames = req.getHeaderNames();
StringBuilder headerValues = new StringBuilder();
String requestBody = new String(req.getContentAsByteArray());
headerNames.asIterator().forEachRemaining(headerName -> {
String value = req.getHeader(headerName);
headerValues.append(headerName).append(":").append(value).append(", ");
});
log.info("============ http request ============");
log.info("uri: {}, method: {}", uri, method);
log.info("reqHeader: [{}]", headerValues);
log.info("requestBody: {},", requestBody);
StringBuilder resHeaderValues = new StringBuilder();
res.getHeaderNames().forEach(resHeaderName -> {
String value = res.getHeader(resHeaderName);
resHeaderValues.append(resHeaderName).append(":").append(value).append(", ");
});
String resBody = new String(res.getContentAsByteArray());
log.info("resHeader: [{}]", resHeaderValues);
log.info("resBody: {}", resBody);
log.info("======================================");
res.copyBodyToResponse();
}
}
이런 정보를 찾고 있었습니다, 감사합니다.