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

by.stub.utils.HttpRequestUtils Maven / Gradle / Ivy

/*
 * Source: https://raw.githubusercontent.com/sushain97/contestManagement/master/src/util/RequestPrinter.java
 * Note: Slight modifications made to fit custom requirements.
 */

package by.stub.utils;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import static by.stub.utils.FileUtils.BR;

public final class HttpRequestUtils {

   private static final String INDENT_UNIT = "   ";
   private static final String LEFT_BRACKET = "[";
   private static final String RIGHT_BRACKET = "]";
   private static final String LEFT_CURLY_BRACE = "{";
   private static final String RIGHT_CURLY_BRACE = "}";
   private static final String COMMA = ",";
   private static final String EMPTY_BRACES = LEFT_CURLY_BRACE + RIGHT_CURLY_BRACE;

   private HttpRequestUtils() {

   }

   private static String debugStringParameter(final String indentString, final String parameterName, final String[] parameterValues) {
      final StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.
         append(indentString).
         append(INDENT_UNIT).
         append("'").append(parameterName).append("': ");
      if (parameterValues == null || parameterValues.length == 0) {
         stringBuilder.append("None");
      } else {
         if (parameterValues.length > 1) {
            stringBuilder.append(LEFT_BRACKET);
         }
         stringBuilder.append(StringUtils.join(parameterValues, COMMA.charAt(0)));
         if (parameterValues.length > 1) {
            stringBuilder.append(RIGHT_BRACKET);
         }
      }
      return stringBuilder.toString();
   }

   private static String debugStringHeader(final String indentString, final String headerName, final List headerValues) {
      final StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.
         append(indentString).
         append(INDENT_UNIT).
         append("'").append(headerName).append("': ");
      if (headerValues == null || headerValues.size() == 0) {
         stringBuilder.append("None");
      } else {
         if (headerValues.size() > 1) {
            stringBuilder.append(LEFT_BRACKET);
         }
         stringBuilder.append(StringUtils.join(headerValues.toArray(new String[headerValues.size()]), COMMA.charAt(0)));
         if (headerValues.size() > 1) {
            stringBuilder.append(RIGHT_BRACKET);
         }
      }
      return stringBuilder.toString();
   }

   private static String debugStringParameters(final HttpServletRequest request, final int indent) {
      final Enumeration parameterNames = request.getParameterNames();
      if (parameterNames == null || !parameterNames.hasMoreElements()) {
         return EMPTY_BRACES;
      }

      final String indentString = StringUtils.repeat(INDENT_UNIT, indent);
      final StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append(LEFT_CURLY_BRACE).append(BR);
      while (parameterNames.hasMoreElements()) {
         final String parameterName = parameterNames.nextElement();
         final String[] parameterValues = request.getParameterValues(parameterName);
         stringBuilder.
            append(HttpRequestUtils.debugStringParameter(indentString, parameterName, parameterValues)).
            append(COMMA).append(BR);
      }
      stringBuilder.append(indentString).append(RIGHT_CURLY_BRACE).append(BR);
      return stringBuilder.toString();
   }

   private static String debugStringHeaders(final HttpServletRequest request, final int indent) {
      final Enumeration headerNames = request.getHeaderNames();
      if (headerNames == null || !headerNames.hasMoreElements()) {
         return EMPTY_BRACES;
      }
      final String indentString = StringUtils.repeat(INDENT_UNIT, indent);
      final StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append(LEFT_CURLY_BRACE).append(BR);
      while (headerNames.hasMoreElements()) {
         final String headerName = headerNames.nextElement();
         final Enumeration headerValues = request.getHeaders(headerName);
         final List headerValuesList = new ArrayList<>();
         while (headerValues != null && headerValues.hasMoreElements()) {
            headerValuesList.add(headerValues.nextElement());
         }
         stringBuilder.
            append(HttpRequestUtils.debugStringHeader(indentString, headerName, headerValuesList)).
            append(COMMA).append(BR);
      }
      stringBuilder.append(indentString).append(RIGHT_CURLY_BRACE).append(BR);
      return stringBuilder.toString();
   }

   /**
    * Debug complete request
    *
    * @param request Request parameter.
    * @return A string with debug information on Request's header
    */
   public static String dump(HttpServletRequest request) {

      //TODO If POST or PUT, HandlerUtils.extractPostRequestBody, MUST copy stream!!!

      final StringBuilder stringBuilder = new StringBuilder();

      stringBuilder.append(INDENT_UNIT + "PROTOCOL: ").append(request.getProtocol()).append(BR);
      stringBuilder.append(INDENT_UNIT + "METHOD: ").append(request.getMethod()).append(BR);
      stringBuilder.append(INDENT_UNIT + "CONTEXT PATH: ").append(request.getContextPath()).append(BR);
      stringBuilder.append(INDENT_UNIT + "SERVLET PATH: ").append(request.getServletPath()).append(BR);
      stringBuilder.append(INDENT_UNIT + "AUTH TYPE: ").append(request.getAuthType()).append(BR);
      stringBuilder.append(INDENT_UNIT + "REMOTE USER: ").append(request.getRemoteUser()).append(BR);
      stringBuilder.append(INDENT_UNIT + "REQUEST URI: ").append(request.getRequestURI()).append(BR);
      stringBuilder.append(INDENT_UNIT + "REQUEST URL: ").append(request.getRequestURL()).append(BR);
      stringBuilder.append(INDENT_UNIT + "QUERY STRING: ").append(request.getQueryString()).append(BR);
      stringBuilder.append(INDENT_UNIT + "PATH INFO: ").append(request.getPathInfo()).append(BR);
      stringBuilder.append(INDENT_UNIT + "PATH TRANSLATED: ").append(request.getPathTranslated()).append(BR);

      stringBuilder.append(INDENT_UNIT + "PARAMETERS: ").append(HttpRequestUtils.debugStringParameters(request, 1)).append(BR);

      stringBuilder.append(INDENT_UNIT + "HEADERS: ").append(HttpRequestUtils.debugStringHeaders(request, 1)).append(BR);

      return stringBuilder.toString();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy