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

io.bitsensor.plugins.java.http.filter.handler.HttpInputHandler Maven / Gradle / Ivy

The newest version!
package io.bitsensor.plugins.java.http.filter.handler;

import io.bitsensor.lib.entity.proto.Error;
import io.bitsensor.lib.entity.proto.GeneratedBy;
import io.bitsensor.plugins.java.core.BitSensor;
import io.bitsensor.plugins.java.http.filter.BitSensorRequestWrapper;
import io.bitsensor.plugins.shaded.org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

/**
 * Collects information about the HTTP request data.
 */
@Component
public class HttpInputHandler implements RequestHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response) {
        String method = request.getMethod().toLowerCase();

        handleParameterMap(request, method);
        handleRequestBody(request, method);
    }

    private void handleParameterMap(HttpServletRequest request, String method) {
        for (Map.Entry valuesByKey : request.getParameterMap().entrySet()) {
            String[] values = valuesByKey.getValue();
            String key = valuesByKey.getKey();

            String valueString = "";
            if (values.length > 1) {
                valueString = Arrays.toString(values);
            } else if (values.length == 1) {
                valueString = values[0];
            }

            BitSensor.addInput("http." + method + "." + key, valueString);
        }
    }

    private void handleRequestBody(HttpServletRequest request, String method) {
        if (!(request instanceof BitSensorRequestWrapper))
            return;

        BitSensorRequestWrapper wrapper = (BitSensorRequestWrapper) request;

        try {
            byte[] bodyBytes = wrapper.getRequestBody();

            // Do not log request body heavier than 100kb
            if (bodyBytes.length > 102400) {
                BitSensor.addError(Error.newBuilder()
                        .setDescription("Request body with size heavier than 100KB is not collected.")
                        .setGeneratedBy(GeneratedBy.PLUGIN)
                        .build());
                return;
            }

            String body = new String(bodyBytes);

            if (!body.trim().isEmpty())
                BitSensor.addInput("http." + method + ".body", body);
        } catch (IOException ignored) {
        }
    }

    @Override
    public ExecutionMoment getExecutionMoment() {
        return ExecutionMoment.POST_HANDLE;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy