@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final long id = aid.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (printEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } } }
OutputStream originalStream = responseContext.getEntityStream();
import java.io.IOException; import java.util.Objects; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; /** * Responsefilter that prefixes all JSON responses with ")]}',\n" for security reasons. * * @see https://docs.angularjs.org/api/ng/service/$http "JSON Vulnerability" */ @Provider public class AngularJsonVulnerabilityProtectionInterceptor implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { boolean mediaTypeJSON = MediaType.APPLICATION_JSON.equals(Objects.toString(responseContext.getMediaType())); if (mediaTypeJSON) { responseContext.getEntityStream().write(")]}',\n".getBytes("UTF-8")); } } }
public LocalResponse(final ContainerResponseContext context) { this.stream = new TeeOutputStream(context.getEntityStream()); context.setEntityStream(stream); this.context = context; }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final long id = this._id.incrementAndGet(); final StringBuilder logMsg = new StringBuilder(); logMsg .append("\n<<< ") .append(responseContext.getStatus()) .append("\n"); if (logHeaders) { logHeaders(logMsg, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); } if (logEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(logMsg, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { if (log.isDebugEnabled()) log.debug(logMsg.toString()); } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final long id = this._id.incrementAndGet(); final StringBuilder logMsg = new StringBuilder(); logMsg .append("\n<<< ") .append(responseContext.getStatus()) .append("\n"); if (logHeaders) { logHeaders(logMsg, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); } if (logEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(logMsg, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { if (log.isDebugEnabled()) log.debug(logMsg.toString()); } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final long id = this._id.incrementAndGet(); final StringBuilder logMsg = new StringBuilder(); logMsg .append("\n<<< ") .append(responseContext.getStatus()) .append("\n"); if (logHeaders) { logHeaders(logMsg, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); } if (logEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(logMsg, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { if (log.isDebugEnabled()) log.debug(logMsg.toString()); } }
@Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { if (isTooSmall(responseContext) || isEncoded(responseContext) || isUncompressable(responseContext)) { return; } List<String> headerLines = requestContext.getHeaders().get(HttpHeaders.ACCEPT_ENCODING); if (headerLines == null) { return; } List<String> acceptedEncodings = parsedHeaders.getUnchecked(headerLines); for (Encoding encoding : Encoding.values()) { if (acceptedEncodings.contains(encoding.encoding)) { MultivaluedMap<String, Object> headers = responseContext.getHeaders(); // Set 'Vary: Accept-Encoding' so intermediate caches differentiate between differently // encoded responses headers.add(HttpHeaders.VARY, HttpHeaders.ACCEPT_ENCODING); headers.add(HttpHeaders.CONTENT_ENCODING, encoding.encoding); responseContext.setEntityStream(encoding.compressor.apply(responseContext.getEntityStream())); return; } } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final long id = aid.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (printEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }
public class RangeResponseFilter implements ContainerResponseFilter { private static final String RANGE = "Range"; private static final String ACCEPT_RANGES = "Accept-Ranges"; @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { if (requestContext.getHeaders().containsKey(RANGE)) { String rangeHeader = requestContext.getHeaderString(RANGE); String contentType = responseContext.getMediaType().toString(); OutputStream originOutputStream = responseContext.getEntityStream(); RangedOutputStream rangedOutputStream = new RangedOutputStream(originOutputStream, rangeHeader, contentType, responseContext.getHeaders()); responseContext.setStatus(Status.PARTIAL_CONTENT.getStatusCode()); responseContext.getHeaders().putSingle(ACCEPT_RANGES, rangedOutputStream.getAcceptRanges()); responseContext.setEntityStream(rangedOutputStream); } } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (printEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (printEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (printEntity && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }
@Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { @SuppressWarnings("unchecked") ResponseObjectAwareMessageBodyWriter<Object> writer = (ResponseObjectAwareMessageBodyWriter<Object>) getMessageWriter(responseContext.getEntityClass()); if (writer != null) { Object entity = responseContext.getEntity(); Class<?> entityClass = responseContext.getEntityClass(); int status = writer.getStatusCode(entity, entityClass); responseContext.setStatus(status); if (status == Status.NO_CONTENT.getStatusCode()) { writer.writeTo(entity, entityClass, null, null, responseContext.getMediaType(), responseContext.getHeaders(), responseContext.getEntityStream()); } } }
/** * {@inheritDoc} */ @Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); requestContext.setProperty(LOGGER_BUFFER_PROPERTY, b); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); if (printEntity && isSupportPrintType(responseContext.getMediaType()) && responseContext.hasEntity()) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { final OutputStream stream = new LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } } }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { String uri = requestContext.getUriInfo().getRequestUri().getPath(); if (jerseyFiltering.excludeForUri(uri)) { return; } recordIncoming(requestContext, "responded"); ConnectContext.set(Constants.REST_STATUS_CODE, Integer.toString(responseContext.getStatus())); Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); StringBuilder b = new StringBuilder(); printResponseLine(b, "Server responded with a response", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getStringHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { OutputStream stream = new BaseFilteringLogger.LoggingStream(b, responseContext.getEntityStream()); responseContext.setEntityStream(stream); requestContext.setProperty(ENTITY_LOGGER_PROPERTY, stream); // not calling log(b) here - it will be called by the interceptor } else { log(b); } }