package com.camptocamp.owsproxy; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; /** * Logger Filter for the OWS requests */ public class OWSLoggerFilter implements Filter { private FilterConfig filterConfig = null; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void destroy() { this.filterConfig = null; } private String _parametersToString(Map parameters) throws UnsupportedEncodingException { String result = ""; boolean first = true; for (Object key : parameters.keySet()) { if (!first) { result += "&"; } else { first = false; } String[] values = (String[]) parameters.get(key); assert values.length == 1; String val = values[0]; result += key + "=" + val; } return result; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (filterConfig == null) return; System.out.println("LOGGING request"); Map m = request.getParameterMap(); String paramsString = _parametersToString(m); System.out.println("Value: " + paramsString); HttpServletRequest httpServletRequest = ((HttpServletRequest) request); Map<String, String> params = new HashMap<String, String>(); params.put("date_readable", new Date().toString()); params.put("date_unix", "" + new Date().getTime()); params.put("request", paramsString); params.put("local_addr", request.getLocalAddr()); params.put("local_name", request.getLocalName()); params.put("local_port", "" + request.getLocalPort()); params.put("requestURI", httpServletRequest.getRequestURI()); params.put("remote_host", "" + request.getRemoteHost()); params.put("user_principal", "" + httpServletRequest.getUserPrincipal().getName()); String result = ""; boolean first = true; for (Object key : params.keySet()) { if (!first) { result += ";"; } else { first = false; } result += key + "=" + params.get(key); } log(result); HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper( (HttpServletResponse) response); chain.doFilter(request, wrapper); } static void log(String result) throws IOException { String prefix = new Date().getTime() + " - "; String catalinaBase = System.getProperty("catalina.base"); String logPath = catalinaBase + File.separator + "logs" + File.separator + "owsproxyserver_logs.txt"; System.out.println("Log path: " + logPath); BufferedWriter bf = new BufferedWriter(new FileWriter(logPath, true)); System.out.println(prefix + result); bf.write(prefix + result + "\n"); bf.flush(); bf.close(); } }