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

de.thksystems.util.servlet.ServletUtils Maven / Gradle / Ivy

/*
 * tksCommons / mugwort
 *
 * Author : Thomas Kuhlmann (ThK-Systems, http://www.thk-systems.de) License : LGPL (https://www.gnu.org/licenses/lgpl.html)
 */

package de.thksystems.util.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;

public class ServletUtils {

    private static final String DEFAULT_SEPARATOR = ",";

    /**
     * Get http params as comma-separated string-list.
     */
    public static String getHttpParamsAsString(ServletRequest request) {
        ArrayList paramList = new ArrayList<>();
        Enumeration paramNames = request.getParameterNames();
        while (paramNames != null && paramNames.hasMoreElements()) {
            String paramKey = paramNames.nextElement();
            String paramValue = request.getParameter(paramKey);
            paramList.add(String.format("'%s'='%s'", paramKey, paramValue));
        }
        return StringUtils.join(paramList, DEFAULT_SEPARATOR);
    }

    /**
     * Get http headers as comma-separated string-list.
     */
    public static String getHttpHeadersAsString(HttpServletRequest request) {
        ArrayList headerList = new ArrayList<>();
        Enumeration headerNames = request.getHeaderNames();
        while (headerNames != null && headerNames.hasMoreElements()) {
            String headerKey = headerNames.nextElement();
            String headerValue = request.getHeader(headerKey);
            headerList.add(String.format("'%s'='%s'", headerKey, headerValue));
        }
        return StringUtils.join(headerList, DEFAULT_SEPARATOR);
    }

    /**
     * Get http cookies as comma-separated string-list.
     */
    public static String getHttpCookiesAsString(HttpServletRequest request) {
        ArrayList cookieList = new ArrayList<>();
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                cookieList.add(ToStringBuilder.reflectionToString(cookie));
            }
            return StringUtils.join(cookieList, DEFAULT_SEPARATOR);
        } else {
            return "";
        }
    }

    /**
     * Returns the whole servlet (Params, Headers, Cookies, Body) dump
     */
    public static String getServletDump(HttpServletRequest request) {
        try {
            StringBuilder sb = new StringBuilder();
            sb.append("SERVLET REQUEST").append(IOUtils.LINE_SEPARATOR);
            sb.append(String.format(" FROM %s (%s:%d", request.getRemoteHost(), request.getRemoteAddr(), request.getRemotePort()));
            sb.append(String.format(" TO %s (%s:%d)", request.getLocalName(), request.getLocalAddr(), request.getLocalPort()));
            sb.append(IOUtils.LINE_SEPARATOR);
            sb.append("  URL: ").append(request.getPathInfo()).append(IOUtils.LINE_SEPARATOR).append(IOUtils.LINE_SEPARATOR);
            getServletDumpAddList(sb, "HEADERS", getHttpHeadersAsString(request).split(DEFAULT_SEPARATOR));
            getServletDumpAddList(sb, "PARAMETERS", getHttpParamsAsString(request).split(DEFAULT_SEPARATOR));
            getServletDumpAddList(sb, "COOKIES", getHttpCookiesAsString(request).split(DEFAULT_SEPARATOR));
            List bodyReader = IOUtils.readLines(request.getReader());
            getServletDumpAddList(sb, "BODY", bodyReader.toArray(new String[bodyReader.size()]));
            return sb.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static void getServletDumpAddList(StringBuilder sb, String capitol, String[] elements) {
        sb.append("  ").append(capitol).append(IOUtils.LINE_SEPARATOR);
        for (String element : elements) {
            sb.append("    ").append(element).append(IOUtils.LINE_SEPARATOR);
        }
        sb.append(IOUtils.LINE_SEPARATOR);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy