@Override public String getRequestMethod() { return context.getMethod(); }
/** * Name is generated from class and method as {http-method}:{fully-qualified-class-name}.{method-name}. * * @param requestContext context to extract information from * @return name of span to use */ public static String classMethodName(ContainerRequestContext requestContext) { Method m = getDefinitionMethod(requestContext); return requestContext.getMethod() + ":" + m.getDeclaringClass().getName() + "." + m.getName(); }
@Override public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException { if (HttpMethod.OPTIONS.equals(requestContext.getMethod())) { final MultivaluedMap<String, Object> headers = responseContext.getHeaders(); if (!headers.containsKey(ACCEPT_PATCH_HEADER)) { headers.putSingle(ACCEPT_PATCH_HEADER, MediaType.APPLICATION_JSON_PATCH_JSON); } } } }
/** * Name is generated from path as {http-method}:{request-path}. * * @param requestContext context to extract information from * @return name of span to use */ public static String httpPathMethodName(ContainerRequestContext requestContext) { String path = requestContext.getUriInfo().getPath(); if (!path.startsWith("/")) { path = "/" + path; } return requestContext.getMethod() + ":" + path; }
@Override public void filter(ContainerRequestContext rc) throws IOException { if (!METHODS_TO_IGNORE.contains(rc.getMethod()) && !rc.getHeaders().containsKey(HEADER_NAME)) { throw new BadRequestException(); } } }
@Override public void filter(ContainerRequestContext rc) throws IOException { if (!METHODS_TO_IGNORE.contains(rc.getMethod()) && !rc.getHeaders().containsKey(HEADER_NAME)) { throw new BadRequestException(); } } }
/** * CORS request filter. * Hijack "preflight" OPTIONS requests before the Jersey resources get them. * The response will then pass through the CORS response filter on its way back out. */ @Override public void filter(ContainerRequestContext requestContext) throws IOException { if (HttpMethod.OPTIONS.equals(requestContext.getMethod())) { Response.ResponseBuilder preflightResponse = Response.status(Response.Status.OK); if (requestContext.getHeaderString("Access-Control-Request-Headers") != null) { preflightResponse.header("Access-Control-Allow-Headers", requestContext.getHeaderString("Access-Control-Request-Headers")); } if (requestContext.getHeaderString("Access-Control-Request-Method") != null) { preflightResponse.header("Access-Control-Allow-Method", "GET,POST"); } requestContext.abortWith(preflightResponse.build()); } }
@Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { final String method = requestContext.getMethod(); final String uri = requestContext.getUriInfo().getRequestUri().toString(); final int respStatus = responseContext.getStatus(); final String reasonPhrase = responseContext.getStatusInfo().getReasonPhrase(); final String srcIpAddr = request.get().getRemoteAddr(); final String contentType = requestContext.getHeaderString(HttpHeaders.CONTENT_TYPE); LOGGER.info("Handled request from {} {} {}, content-type {} status code {} {}", srcIpAddr, method, uri, contentType, respStatus, reasonPhrase); } }
@Override public void filter(final ContainerRequestContext request, final ContainerResponseContext response) throws IOException { String id = request.getHeaderString(REQUEST_ID); if (Strings.isNullOrEmpty(id)) { id = generateRandomUuid().toString(); } logger.trace("method={} path={} request_id={} status={} length={}", request.getMethod(), request.getUriInfo().getPath(), id, response.getStatus(), response.getLength()); response.getHeaders().putSingle(REQUEST_ID, id); }
@Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { final Response.StatusType responseStatus = responseContext.getStatusInfo(); final String requestPath = requestContext.getUriInfo().getAbsolutePath().getPath(); final List<MediaType> acceptableMediaTypes = requestContext.getAcceptableMediaTypes(); final boolean acceptsHtml = acceptableMediaTypes.stream() .anyMatch(mediaType -> mediaType.isCompatible(MediaType.TEXT_HTML_TYPE) || mediaType.isCompatible(MediaType.APPLICATION_XHTML_XML_TYPE)); final boolean isGetRequest = "get".equalsIgnoreCase(requestContext.getMethod()); if (isGetRequest && responseStatus == Response.Status.NOT_FOUND && acceptsHtml && !requestPath.startsWith("/" + HttpConfiguration.PATH_API)) { final String entity = indexHtmlGenerator.get(requestContext.getHeaders()); responseContext.setStatusInfo(Response.Status.OK); responseContext.setEntity(entity, new Annotation[0], MediaType.TEXT_HTML_TYPE); responseContext.getHeaders().putSingle("X-UA-Compatible", "IE=edge"); } } }
@Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { if (LOG.isDebugEnabled()) { try { final String rawQuery = requestContext.getUriInfo().getRequestUri().getRawQuery(); final Date requestDate = requestContext.getDate(); final String userName = RestTools.getUserNameFromRequest(requestContext); final String remoteAddress = RestTools.getRemoteAddrFromRequest(response.getRequest(), trustedProxies); final String userAgent = requestContext.getHeaderString(HttpHeaders.USER_AGENT); LOG.debug("{} {} [{}] \"{} {}{}\" {} {} {}", remoteAddress, userName == null ? "-" : userName, (requestDate == null ? "-" : requestDate), requestContext.getMethod(), requestContext.getUriInfo().getPath(), (rawQuery == null ? "" : "?" + rawQuery), (userAgent == null ? "-" : userAgent), responseContext.getStatus(), responseContext.getLength()); } catch (Exception e) { LOG.error("Error while processing REST API access log", e); } } } }
@Override public void filter(final ContainerRequestContext context) throws IOException { final long id = aid.incrementAndGet(); final StringBuilder b = new StringBuilder(); printRequestLine(b, "Server has received a request", id, context.getMethod(), context.getUriInfo() .getRequestUri()); printPrefixedHeaders(b, id, REQUEST_PREFIX, context.getHeaders()); if (printEntity && context.hasEntity()) { context.setEntityStream(logInboundEntity(b, context.getEntityStream())); } log(b); }
@Override public void filter(ContainerRequestContext requestContext) throws IOException { final SecurityContext securityContext = requestContext.getSecurityContext(); if (securityContext instanceof ShiroSecurityContext) { final ShiroSecurityContext context = (ShiroSecurityContext) securityContext; final String userName = RestTools.getUserNameFromRequest(requestContext); final ContextAwarePermissionAnnotationHandler annotationHandler = new ContextAwarePermissionAnnotationHandler(context); final String[] requiredPermissions = annotation.value(); try { LOG.debug("Checking authorization for user [{}], needs permissions: {}", userName, requiredPermissions); annotationHandler.assertAuthorized(annotation); } catch (AuthorizationException e) { LOG.info("Not authorized. User <{}> is missing permissions {} to perform <{} {}>", userName, Arrays.toString(requiredPermissions), requestContext.getMethod(), requestContext.getUriInfo().getPath()); throw new ForbiddenException("Not authorized"); } } else { throw new ForbiddenException(); } } }
@Override public void filter(final ContainerRequestContext request) { if (!request.getMethod().equalsIgnoreCase("POST")) { return;
@Override public void filter(final ContainerRequestContext request) { if (!request.getMethod().equalsIgnoreCase("POST")) { return;
@Override public void filter(final ContainerRequestContext context) throws IOException { if (!logger.isLoggable(level)) { return; } final long id = _id.incrementAndGet(); context.setProperty(LOGGING_ID_PROPERTY, id); final StringBuilder b = new StringBuilder(); printRequestLine(b, "Server has received a request", id, context.getMethod(), context.getUriInfo().getRequestUri()); printPrefixedHeaders(b, id, REQUEST_PREFIX, context.getHeaders()); if (context.hasEntity() && printEntity(verbosity, context.getMediaType())) { context.setEntityStream( logInboundEntity(b, context.getEntityStream(), MessageUtils.getCharset(context.getMediaType()))); } log(b); }
@Override public void filter(final ContainerRequestContext context) throws IOException { if (!logger.isLoggable(level)) { return; } final long id = _id.incrementAndGet(); context.setProperty(LOGGING_ID_PROPERTY, id); final StringBuilder b = new StringBuilder(); printRequestLine(b, "Server has received a request", id, context.getMethod(), context.getUriInfo().getRequestUri()); printPrefixedHeaders(b, id, REQUEST_PREFIX, context.getHeaders()); if (context.hasEntity() && printEntity(verbosity, context.getMediaType())) { context.setEntityStream( logInboundEntity(b, context.getEntityStream(), MessageUtils.getCharset(context.getMediaType()))); } log(b); }
@Override protected FilterContext initRequestFiltering(ContainerRequestContext requestContext) { FilterContext context = new FilterContext(); Method definitionMethod = getDefinitionMethod(requestContext); if (definitionMethod == null) { // this will end in 404, just let it on context.setShouldFinish(true); return context; } context.setMethodSecurity(getMethodSecurity(definitionMethod)); context.setResourceName(definitionMethod.getDeclaringClass().getSimpleName()); context.setMethod(requestContext.getMethod()); context.setHeaders(HttpUtil.toSimpleMap(requestContext.getHeaders())); context.setTargetUri(requestContext.getUriInfo().getRequestUri()); context.setResourcePath(context.getTargetUri().getPath()); context.setJerseyRequest((ContainerRequest) requestContext); // now extract headers featureConfig().getQueryParamHandlers() .forEach(handler -> handler.extract(uriInfo, context.getHeaders())); return context; }
@Override public void filter(ContainerRequestContext requestContext) { if (!tracingEnabled(requestContext)) { return; } ServerRequest serverRequest = this.request.get(); Tracer tracer = serverRequest.webServer().configuration().tracer(); SpanContext parentSpan = TracingContext.get() .map(TracingContext::parentSpan) .orElseGet(serverRequest::spanContext); Tracer.SpanBuilder spanBuilder = tracer .buildSpan(spanName(requestContext)) .asChildOf(parentSpan) .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER) .withTag(Tags.HTTP_METHOD.getKey(), requestContext.getMethod()) .withTag(Tags.HTTP_URL.getKey(), requestContext.getUriInfo().getRequestUri().toString()) .withTag(Tags.COMPONENT.getKey(), "jaxrs"); configureSpan(spanBuilder); Span span = spanBuilder.start(); requestContext.setProperty(SPAN_PROPERTY, span); // set the client tracing context TracingContext.compute(() -> TracingContext.create(tracer, requestContext.getHeaders())) .parentSpan(span.context()); }
@Override protected SecurityFilter.FilterContext initRequestFiltering(ContainerRequestContext requestContext) { SecurityFilter.FilterContext context = new SecurityFilter.FilterContext(); // this is a pre-matching filter, so no method or class security SecurityDefinition methodDef = new SecurityDefinition(false); methodDef.requiresAuthentication(true); methodDef.setRequiresAuthorization(featureConfig().shouldUsePrematchingAuthorization()); context.setMethodSecurity(methodDef); context.setResourceName("jax-rs"); context.setMethod(requestContext.getMethod()); context.setHeaders(HttpUtil.toSimpleMap(requestContext.getHeaders())); context.setTargetUri(requestContext.getUriInfo().getRequestUri()); context.setResourcePath(context.getTargetUri().getPath()); context.setJerseyRequest((ContainerRequest) requestContext); // now extract headers featureConfig().getQueryParamHandlers() .forEach(handler -> handler.extract(uriInfo, context.getHeaders())); return context; }