/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws.p.router.web.wrap; import ru.codeinside.gws.api.ServerLog; import ru.codeinside.gws.p.router.web.Servlet; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; import java.util.Enumeration; final class HttpServletRequestLogger extends HttpServletRequestWrapper { final HttpServletRequest request; final ServerLog serverLog; ServletInputStream inputStream; HttpServletRequestLogger(ServerLog serverLog, HttpServletRequest request) { super(request); this.request = request; this.serverLog = serverLog; PrintWriter pw = new PrintWriter(serverLog.getHttpInStream(), true); //TODO: what about charset? pw.print(request.getMethod()); pw.print(" "); pw.print(request.getRequestURI()); pw.println(" HTTP/1.1"); Enumeration<String> headers = request.getHeaderNames(); while (headers.hasMoreElements()) { String header = headers.nextElement(); Enumeration<String> values = request.getHeaders(header); while (values.hasMoreElements()) { pw.println(header + ": " + values.nextElement()); } } pw.println(); request.setAttribute(ServerLog.class.getName(), serverLog); } @Override public ServletInputStream getInputStream() throws IOException { if (inputStream == null) { inputStream = new ServletInputStreamLogger(request.getInputStream(), serverLog.getHttpInStream()); } return inputStream; } }