public String getUri() { return uri.getPath(); } }
public static StringBuilder append(StringBuilder sb, UriInfo uriInfo, HttpHeaders httpHeaders) { sb.append("\n UriInfo:"); sb.append("\n Absolute path : ").append(uriInfo.getAbsolutePath()); sb.append("\n Base URI : ").append(uriInfo.getBaseUri()); sb.append("\n Mathced resources : ").append(uriInfo.getMatchedResources().toString()); sb.append("\n Matched URIs : ").append(uriInfo.getMatchedURIs().toString()); sb.append("\n Path : ").append(uriInfo.getPath()); sb.append("\n Path parameters:\n"); dumpMultivaluedMap(sb, uriInfo.getPathParameters()); sb.append(" Path segments : ").append(uriInfo.getPathSegments().toString()); sb.append("\n Query parameters:\n"); dumpMultivaluedMap(sb, uriInfo.getQueryParameters()); sb.append(" Request URI : ").append(uriInfo.getRequestUri()); sb.append("\n\n HttpHeaders:\n"); dumpMultivaluedMap(sb, httpHeaders.getRequestHeaders()); return sb; }
@PostConstruct public void postConstruct() { this.injectedPath = uri.getPath(); }
@GET @Path("{uriInfo}") public String getPath() { return uriInfo != null ? uriInfo.getPath() : "uri info is null"; } }
@Path("{ui}") @GET public String getUi() { return ui != null ? ui.getPath() : "UriInfo is null"; } }
@GET @Path("{name}") @Produces("text/plain") public String getHello(@PathParam("name") String name) { return "Hello_" + name + " [" + application.getNumber() + "] " + "[" + uriInfo.getPath() + "] " + this; } }
@GET @Path("{name}") @Produces("text/plain") public String getHello() { return "Hello_" + name + " [" + application.getNumber() + "] " + "[" + uriInfo.getPath() + "] " + this; } }
private void logException(ValidationException exception) { LOGGER.error(String.format("Error %s url: '%s'", exception.getClass().getSimpleName(), getUriInfo().getPath()), exception); }
private void logException(ApplicationException exception) { LOGGER.error(String.format("Error %s url: '%s'", exception.getClass().getSimpleName(), getUriInfo().getPath()), exception); }
@Override public Response toResponse(WebApplicationException exception) { logger.error(String.format("Error %s url: '%s'", exception.getClass().getSimpleName(), uriInfo.getPath()), exception); Response response = exception.getResponse(); this.code = Code.forValue(response.getStatus()); Map<String, Object> entityMap = new LinkedHashMap<>(); entityMap.put("instance", host); entityMap.put("code", Optional.of(code.toString()).orElse(null)); entityMap.put("message", exception.getCause()); entityMap.put("retryable", false); return Response.status(response.getStatus()).entity(entityMap).build(); }
private Response handlerWebApplicationException(WebApplicationException throwable) { WebApplicationException ex = throwable; CommonResultView<?> resultView = CommonResultView.fail(ex.getResponse().getStatus() , ex.getResponse().getStatus(), ex.getMessage(), null); log.error("[WebApplicationException] {} - {}, [uri]{}", resultView.getStatus() , resultView.getMessage(), uriInfo.getPath()); return Response.status(resultView.getStatus()) .entity(resultView) .type(MediaType.APPLICATION_JSON).build(); }
@Override public Response toResponse(Throwable exception) { LOGGER.error(String.format("Error %s url: '%s'", exception.getClass().getSimpleName(), uriInfo.getPath()), exception); Monitors.error("error", "error"); ApplicationException applicationException = null; if (exception instanceof IllegalArgumentException || exception instanceof InvalidFormatException) { applicationException = new ApplicationException(Code.INVALID_INPUT, exception.getMessage(), exception); } else { applicationException = new ApplicationException(Code.INTERNAL_ERROR, exception.getMessage(), exception); } Map<String, Object> entityMap = applicationException.toMap(); entityMap.put("instance", host); return Response.status(applicationException.getHttpStatusCode()).entity(entityMap).type(MediaType.APPLICATION_JSON_TYPE).build(); }
/** * 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; }
private Response handleThrowable(Throwable throwable) { String errorMessage = getMessageWithCause(throwable); CommonResultView<?> resultView = CommonResultView.fail(500, 500, errorMessage, null); log.error("[WebApplicationException] {} - {}, [uri]{}", resultView.getStatus() , resultView.getMessage(), uriInfo.getPath(), throwable); return Response.status(resultView.getStatus()) .entity(resultView) .type(MediaType.APPLICATION_JSON).build(); }
private Response handlerErrorStateException(ErrorStateException throwable) { ErrorStateException ex = throwable; ErrorState errorState = ex.getErrorState(); CommonResultView<?> resultView = CommonResultView.fail(errorState.getStatus().getStatusCode() , errorState.getErrorCode(), errorState.getErrorMessage(), null); StackTraceElement lastStack = Arrays.stream(ex.getStackTrace()).findFirst().orElse(null); log.error("[ErrorStateException] {} - {} - {}, [uri]{} at {}", resultView.getStatus(), resultView.getMessage(), ex.getMessage(), uriInfo.getPath(), lastStack, ex); return Response.status(resultView.getStatus()) .entity(resultView) .type(MediaType.APPLICATION_JSON).build(); }
/** * This method checks path of the incoming request, and * redirects following URIs: * <li>/controller -> SiteToSiteResource * @param requestContext request to be modified */ @Override public void filter(ContainerRequestContext requestContext) throws IOException { final UriInfo uriInfo = requestContext.getUriInfo(); if (uriInfo.getPath().equals("controller")){ UriBuilder builder = UriBuilder.fromUri(uriInfo.getBaseUri()) .path(SiteToSiteResource.class) .replaceQuery(uriInfo.getRequestUri().getRawQuery()); URI redirectTo = builder.build(); requestContext.setRequestUri(uriInfo.getBaseUri(), redirectTo); } } }
@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); }
private Response handleErrorStateBizException(ErrorStateBizException throwable) { ErrorStateBizException ex = throwable; ErrorState errorState = ex.getErrorState(); String errorMessage = (errorState == ErrorState.VALIDATE_ERROR) ? errorState.getErrorMessage() + ex.getMessage() : errorState.getErrorMessage(); CommonResultView<?> resultView = CommonResultView.fail(errorState.getStatus().getStatusCode() , errorState.getErrorCode(), errorMessage, null); String lastStack = Arrays.stream(ex.getStackTrace()).limit(3).map(StackTraceElement::toString).collect(Collectors.joining("\\n ")); log.error("[ErrorStateBizException] {} - {} - {}, [uri]{} at {}", resultView.getStatus() , resultView.getMessage(), ex.getMessage(), uriInfo.getPath(), lastStack); return Response.status(resultView.getStatus()) .entity(resultView) .type(MediaType.APPLICATION_JSON).build(); }
@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(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(); } } }