View Javadoc

1   package ch.qos.logback.access.servlet;
2   
3   import java.io.IOException;
4   
5   import javax.servlet.Filter;
6   import javax.servlet.FilterChain;
7   import javax.servlet.FilterConfig;
8   import javax.servlet.ServletException;
9   import javax.servlet.ServletRequest;
10  import javax.servlet.ServletResponse;
11  import javax.servlet.http.HttpServletRequest;
12  import javax.servlet.http.HttpServletResponse;
13  
14  import ch.qos.logback.access.AccessConstants;
15  
16  public class TeeFilter implements Filter {
17  
18    public void destroy() {
19      // NOP
20    }
21  
22    public void doFilter(ServletRequest request, ServletResponse response,
23        FilterChain filterChain) throws IOException, ServletException {
24  
25      if (request instanceof HttpServletRequest) {
26        try {
27          TeeHttpServletRequest teeRequest = new TeeHttpServletRequest(
28              (HttpServletRequest) request);
29          TeeHttpServletResponse teeResponse = new TeeHttpServletResponse(
30              (HttpServletResponse) response);
31          
32          //System.out.println("BEFORE TeeFilter. filterChain.doFilter()");
33          filterChain.doFilter(teeRequest, teeResponse);
34          //System.out.println("AFTER TeeFilter. filterChain.doFilter()");
35  
36          teeResponse.finish();
37          // let the output contents be available for later use by
38          // logback-access-logging
39          teeRequest.setAttribute(AccessConstants.LB_OUTPUT_BUFFER, teeResponse
40              .getOutputBuffer());
41        } catch (IOException e) {
42          e.printStackTrace();
43          throw e;
44        } catch (ServletException e) {
45          e.printStackTrace();
46          throw e;
47        }
48      } else {
49        filterChain.doFilter(request, response);
50      }
51  
52    }
53  
54    public void init(FilterConfig arg0) throws ServletException {
55      // NOP
56    }
57  
58  }