LoggingFilter.java

  1. /*
  2.  * *********************************************************************************************************************
  3.  *
  4.  * blueMarine II: Semantic Media Centre
  5.  * http://tidalwave.it/projects/bluemarine2
  6.  *
  7.  * Copyright (C) 2015 - 2021 by Tidalwave s.a.s. (http://tidalwave.it)
  8.  *
  9.  * *********************************************************************************************************************
  10.  *
  11.  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  12.  * the License. You may obtain a copy of the License at
  13.  *
  14.  *     http://www.apache.org/licenses/LICENSE-2.0
  15.  *
  16.  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  17.  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
  18.  * specific language governing permissions and limitations under the License.
  19.  *
  20.  * *********************************************************************************************************************
  21.  *
  22.  * git clone https://bitbucket.org/tidalwave/bluemarine2-src
  23.  * git clone https://github.com/tidalwave-it/bluemarine2-src
  24.  *
  25.  * *********************************************************************************************************************
  26.  */
  27. package it.tidalwave.bluemarine2.rest.impl.server;

  28. import javax.annotation.Nonnull;
  29. import java.util.Enumeration;
  30. import java.io.IOException;
  31. import javax.servlet.Filter;
  32. import javax.servlet.FilterChain;
  33. import javax.servlet.FilterConfig;
  34. import javax.servlet.ServletException;
  35. import javax.servlet.ServletRequest;
  36. import javax.servlet.ServletResponse;
  37. import javax.servlet.http.HttpServletRequest;
  38. import javax.servlet.http.HttpServletResponse;
  39. import lombok.extern.slf4j.Slf4j;
  40. import org.springframework.http.HttpStatus;

  41. /***********************************************************************************************************************
  42.  *
  43.  * @author  Fabrizio Giudici
  44.  *
  45.  **********************************************************************************************************************/
  46. @Slf4j
  47. public class LoggingFilter implements Filter
  48.   {

  49.     @Override
  50.     public void init (@Nonnull final FilterConfig filterConfig)
  51.       {
  52.       }

  53.     @Override
  54.     public void doFilter (@Nonnull final ServletRequest req,
  55.                           @Nonnull final ServletResponse res,
  56.                           @Nonnull final FilterChain chain)
  57.       throws IOException, ServletException
  58.       {
  59.         final HttpServletRequest request = (HttpServletRequest)req;
  60.         final HttpServletResponse response = (HttpServletResponse)res;

  61.         try
  62.           {
  63.             log.debug(">>>> request: {} {} {}", request.getMethod(), request.getRequestURI(), request.getProtocol());

  64.             for (final Enumeration<String> names = request.getHeaderNames(); names.hasMoreElements(); )
  65.               {
  66.                 final String headerName = names.nextElement();
  67.                 log.debug(">>>> request header: {} = {}", headerName, request.getHeader(headerName));
  68.               }

  69.             chain.doFilter(req, res);
  70.           }
  71.         finally
  72.           {
  73.             final int status = response.getStatus();
  74.             log.debug(">>>> response {} {}", status, HttpStatus.valueOf(status).getReasonPhrase());

  75.             for (final String headerName : response.getHeaderNames())
  76.               {
  77.                 log.debug(">>>> response header: {} = {}", headerName, response.getHeaders(headerName));
  78.               }
  79.           }
  80.       }

  81.     @Override
  82.     public void destroy()
  83.       {
  84.       }
  85.   }