@Override protected Map<String, Object> toJsonMap(IAccessEvent event) { return new MapBuilder(timestampFormatter, customFieldNames, additionalFields, includes.size()) .addNumber("port", isIncluded(AccessAttribute.LOCAL_PORT), event::getLocalPort) .addNumber("contentLength", isIncluded(AccessAttribute.CONTENT_LENGTH), event::getContentLength) .addTimestamp("timestamp", isIncluded(AccessAttribute.TIMESTAMP), event.getTimeStamp()) .add("method", isIncluded(AccessAttribute.METHOD), event::getMethod) .add("protocol", isIncluded(AccessAttribute.PROTOCOL), event::getProtocol) .add("requestContent", isIncluded(AccessAttribute.REQUEST_CONTENT), event::getRequestContent) .add("remoteAddress", isIncluded(AccessAttribute.REMOTE_ADDRESS), event::getRemoteAddr) .add("remoteUser", isIncluded(AccessAttribute.REMOTE_USER), event::getRemoteUser) .addMap("headers", !requestHeaders.isEmpty(), () -> filterHeaders(event.getRequestHeaderMap(), requestHeaders)) .addMap("params", isIncluded(AccessAttribute.REQUEST_PARAMETERS), event::getRequestParameterMap) .addNumber("requestTime", isIncluded(AccessAttribute.REQUEST_TIME), event::getElapsedTime) .add("uri", isIncluded(AccessAttribute.REQUEST_URI), event::getRequestURI) .add("url", isIncluded(AccessAttribute.REQUEST_URL), event::getRequestURL) .add("pathQuery", isIncluded(AccessAttribute.PATH_QUERY), () -> event.getRequestURI() + event.getQueryString()) .add("remoteHost", isIncluded(AccessAttribute.REMOTE_HOST), event::getRemoteHost) .add("responseContent", isIncluded(AccessAttribute.RESPONSE_CONTENT), event::getResponseContent) .addMap("responseHeaders", !responseHeaders.isEmpty(), () -> filterHeaders(event.getResponseHeaderMap(), responseHeaders)) .add("serverName", isIncluded(AccessAttribute.SERVER_NAME), event::getServerName) .addNumber("status", isIncluded(AccessAttribute.STATUS_CODE), event::getStatusCode) .add("userAgent", isIncluded(AccessAttribute.USER_AGENT), () -> event.getRequestHeader(USER_AGENT)) .add("version", jsonProtocolVersion != null, jsonProtocolVersion) .build(); }
void addRequestHeaders(IAccessEvent event, Connection connection, long eventId) throws SQLException { Enumeration names = event.getRequestHeaderNames(); if (names.hasMoreElements()) { PreparedStatement insertHeaderStatement = connection.prepareStatement(insertHeaderSQL); while (names.hasMoreElements()) { String key = (String) names.nextElement(); String value = (String) event.getRequestHeader(key); insertHeaderStatement.setLong(1, eventId); insertHeaderStatement.setString(2, key); insertHeaderStatement.setString(3, value); if (cnxSupportsBatchUpdates) { insertHeaderStatement.addBatch(); } else { insertHeaderStatement.execute(); } } if (cnxSupportsBatchUpdates) { insertHeaderStatement.executeBatch(); } insertHeaderStatement.close(); } }
/** * Verifies that the request headers does not have contain the given one. * * @param name the request header name. * @return this instance. * @see IAccessEvent#getRequestHeader(String) */ public S doesNotHaveRequestHeader(String name) { String actualRequestHeader = actual.getRequestHeader(name); Assertions.assertThat(actualRequestHeader).isEqualTo(NA); return myself; }
@Override public String convert(IAccessEvent accessEvent) { if (!isStarted()) { return "INACTIVE_HEADER_CONV"; } if (key != null) { return accessEvent.getRequestHeader(key); } else { return accessEvent.getRequestHeaderMap().toString(); } }
/** * Verifies that the request headers contains the given one. * * @param name the request header name. * @param value the request header value. * @return this instance. * @see IAccessEvent#getRequestHeader(String) */ public S hasRequestHeader(String name, String value) { String actualRequestHeader = actual.getRequestHeader(name); Assertions.assertThat(actualRequestHeader).isEqualTo(value); return myself; }
@Override public String convert(IAccessEvent ae) { StringBuilder buf = new StringBuilder(); buf.append(ae.getRequestURL()); buf.append(CoreConstants.LINE_SEPARATOR); Enumeration headerNames = ae.getRequestHeaderNames(); while (headerNames.hasMoreElements()) { String name = (String) headerNames.nextElement(); buf.append(name); buf.append(": "); buf.append(ae.getRequestHeader(name)); buf.append(CoreConstants.LINE_SEPARATOR); } buf.append(CoreConstants.LINE_SEPARATOR); buf.append(ae.getRequestContent()); return buf.toString(); }
/** {@inheritDoc} */ @Override public FilterReply decide(IAccessEvent event) { String filterReply = event.getRequestHeader(headerName); return Stream.of(FilterReply.values()) .filter(value -> value.name().equalsIgnoreCase(filterReply)) .findFirst() .orElse(FilterReply.NEUTRAL); }
assertNotNull(key); assertNotNull(value); assertEquals(event.getRequestHeader(key), value); rs.next(); key = rs.getString(2); assertNotNull(key); assertNotNull(value); assertEquals(event.getRequestHeader(key), value);
@Test public void callingPrepareForDeferredProcessingShouldBeIdempotent() { String key = "key-"+diff; String val = "val-"+diff; IAccessEvent ae = DummyAccessEventBuilder.buildNewAccessEvent(); DummyRequest request = (DummyRequest) ae.getRequest(); Map<String, String> headersMap = request.getHeaders(); Map<String, String[]> parametersMap = request.getParameterMap(); headersMap.put(key, val); request.setAttribute(key, val); parametersMap.put(key, new String[] {val}); ae.prepareForDeferredProcessing(); assertEquals(val, ae.getAttribute(key)); assertEquals(val, ae.getRequestHeader(key)); assertEquals(val, ae.getRequestParameter(key)[0]); request.setAttribute(key, "change"); headersMap.put(key, "change"); parametersMap.put(key, new String[] {"change"}); ae.prepareForDeferredProcessing(); assertEquals(val, ae.getAttribute(key)); assertEquals(val, ae.getRequestHeader(key)); assertEquals(val, ae.getRequestParameter(key)[0]); }