@Override public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // Use the repose internal Wrapper to grab a response and modify it MutableHttpServletRequest mutableRequest = MutableHttpServletRequest.wrap((HttpServletRequest) servletRequest); mutableRequest.setInputStream(servletRequest.getInputStream()); // Use a repose internal mutable response MutableHttpServletResponse mutableResponse = MutableHttpServletResponse.wrap( (HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse); // Fire off the next one in the filter chain filterChain.doFilter(mutableRequest, mutableResponse); HttpServletRequest req = (HttpServletRequest) servletRequest; // Print out info from request & response wrapper LOG.debug("URI: " + req.getRequestURI()); LOG.debug("Status: " + mutableResponse.getStatus()); // I don't know why this doesn't work :( LOG.debug("mutable content-type: " + mutableResponse.getContentType()); // I don't know why this doesn't work either :( LOG.debug("regular content-type: " + servletRequest.getContentType()); LOG.debug("resp Header 'Content-Type: " + mutableResponse.getHeader("Content-Type")); // THis is not reliable either. You'll have to check the body proper by getting the input stream // and reading it LOG.debug("Has body: " + mutableResponse.hasBody()); // Just a scanner to read in the entire content String content = ""; Scanner s = new Scanner(mutableResponse.getInputStream()).useDelimiter("\\A"); if (s.hasNext()) { content = s.next(); } LOG.debug("Content Body: '" + content + "'"); // verify that the content is not empty. if (content.isEmpty()) { throw new RuntimeException("Content is empty"); } // Make the changes to the body you want to do here, then commit it. mutableResponse .getWriter() .write( content + "<extra> Added by TestFilter, should also see the rest of the content </extra>"); mutableResponse .commitBufferToServletOutputStream(); // THIS MUST BE CALLED HERE TO GET THE THINGS INTO THE // BODY }
@Override public void applyTo(MutableHttpServletRequest request) { if (requestHeaderManager().hasHeaders()) { requestHeaderManager().applyTo(request); } if (requestUriQuery != null) { request.setQueryString(requestUriQuery); } if (requestUri != null && StringUtilities.isNotBlank(requestUri)) { request.setRequestUri(requestUri); } if (requestUrl != null && StringUtilities.isNotBlank(requestUrl.toString())) { request.setRequestUrl(requestUrl); } for (RouteDestination dest : destinations) { request.addDestination(dest); } }