All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.filter.LoggingFilter Maven / Gradle / Ivy

package org.springframework.web.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.Ordered;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;
import org.springframework.web.util.WebUtils;

public class LoggingFilter extends OncePerRequestFilter implements Ordered {
  private int order = Ordered.HIGHEST_PRECEDENCE + 200;

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    if (!(request instanceof ContentCachingRequestWrapper)) {
      request = new ContentCachingRequestWrapper(request);
    }
    if (!(response instanceof ContentCachingResponseWrapper)) {
      response = new ContentCachingResponseWrapper(response);
    }
    try {
      filterChain.doFilter(request, response);
    }
    finally {
      String requestData = getRequestData(request);
      String responseData = getResponseData(response);
      if (logger.isTraceEnabled()) {
        logger.trace("Request: " + requestData);
        logger.trace("Response:" + responseData);
      }
    }
  }

  private String getRequestData(final HttpServletRequest request) throws UnsupportedEncodingException {
    String payload = null;
    ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
    if (wrapper != null) {
      byte[] buf = wrapper.getContentAsByteArray();
      if (buf.length > 0) {
        payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());
      }
    }
    return payload;
  }

  private String getResponseData(final HttpServletResponse response) throws IOException {
    String payload = null;
    ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
    if (wrapper != null) {
      byte[] buf = wrapper.getContentAsByteArray();
      if (buf.length > 0) {
        payload = new String(buf, 0, buf.length, wrapper.getCharacterEncoding());
        wrapper.copyBodyToResponse();
      }
    }
    return payload;
  }

  @Override
  public int getOrder() {
    return this.order;
  }

  public void setOrder(int order) {
    this.order = order;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy