private void describeLimitsForRequest( HttpServletRequest request, FilterDirector director, MediaType preferredMediaType) { if (preferredMediaType.getMimeType() == MimeType.UNKNOWN) { director.setFilterAction(FilterAction.RETURN); director.setResponseStatus(HttpStatusCode.NOT_ACCEPTABLE); } else { // If include absolute limits let request pass thru but prepare the combined // (absolute and active) limits when processing the response if (includeAbsoluteLimits) { director.setFilterAction(FilterAction.PROCESS_RESPONSE); director .requestHeaderManager() .putHeader(CommonHttpHeader.ACCEPT.toString(), MimeType.APPLICATION_XML.toString()); } else { try { final MimeType mimeType = rateLimitingServiceHelper.queryActiveLimits( request, preferredMediaType, director.getResponseOutputStream()); director .responseHeaderManager() .putHeader(CommonHttpHeader.CONTENT_TYPE.toString(), mimeType.toString()); director.setFilterAction(FilterAction.RETURN); director.setResponseStatus(HttpStatusCode.OK); } catch (Exception e) { consumeException(e, director); } } } }
@Override public FilterDirector handleResponse( HttpServletRequest request, ReadableHttpServletResponse response) { final FilterDirector director = new FilterDirectorImpl(); try { final MimeType mimeType = rateLimitingServiceHelper.queryCombinedLimits( request, originalPreferredAccept, response.getBufferedOutputAsInputStream(), director.getResponseOutputStream()); director .responseHeaderManager() .putHeader(CommonHttpHeader.CONTENT_TYPE.toString(), mimeType.toString()); } catch (Exception e) { consumeException(e, director); } return director; }