View Javadoc

1   /*
2    * Copyright 2004-2007 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.cubby.filter;
17  
18  import java.io.IOException;
19  
20  import javax.servlet.Filter;
21  import javax.servlet.FilterChain;
22  import javax.servlet.FilterConfig;
23  import javax.servlet.ServletContext;
24  import javax.servlet.ServletException;
25  import javax.servlet.ServletRequest;
26  import javax.servlet.ServletResponse;
27  import javax.servlet.http.HttpServletRequest;
28  import javax.servlet.http.HttpServletResponse;
29  
30  import org.seasar.cubby.util.RequestDumpUtil;
31  import org.seasar.framework.log.Logger;
32  import org.seasar.framework.util.BooleanConversionUtil;
33  
34  /**
35   * @author manhole
36   */
37  public class RequestDumpFilter implements Filter {
38  
39      private static final Logger logger = Logger
40  			.getLogger(RequestDumpFilter.class);
41  
42      private FilterConfig config = null;
43  
44      private boolean beforeRequestParameter;
45  
46      private boolean afterRequestParameter;
47  
48      private boolean beforeRequestAttribute;
49  
50      private boolean afterRequestAttribute;
51  
52      private boolean beforeCookies;
53  
54      private boolean afterCookies;
55  
56      private boolean beforeRequestHeader;
57  
58      private boolean afterRequestHeader;
59  
60      private boolean beforeSessionAttribute;
61  
62      private boolean afterSessionAttribute;
63  
64      private boolean beforeContextAttribute;
65  
66      private boolean afterContextAttribute;
67  
68      private boolean afterResponse;
69  
70      private static final String INDENT = "  ";
71  
72      private static final String LF = System.getProperty("line.separator");
73  
74      public void init(final FilterConfig filterConfig) throws ServletException {
75          this.config = filterConfig;
76          beforeRequestParameter = getBooleanParameter(filterConfig,
77                  "beforeRequestParameter", true);
78          afterRequestParameter = getBooleanParameter(filterConfig,
79                  "afterRequestParameter", false);
80          beforeRequestAttribute = getBooleanParameter(filterConfig,
81                  "beforeRequestAttribute", true);
82          afterRequestAttribute = getBooleanParameter(filterConfig,
83                  "afterRequestAttribute", true);
84          beforeRequestHeader = getBooleanParameter(filterConfig,
85                  "beforeRequestHeader", true);
86          afterRequestHeader = getBooleanParameter(filterConfig,
87                  "afterRequestHeader", false);
88          beforeContextAttribute = getBooleanParameter(filterConfig,
89                  "beforeContextAttribute", true);
90          afterContextAttribute = getBooleanParameter(filterConfig,
91                  "afterContextAttribute", true);
92          beforeCookies = getBooleanParameter(filterConfig, "beforeCookies", true);
93          afterCookies = getBooleanParameter(filterConfig, "afterCookies", true);
94          beforeSessionAttribute = getBooleanParameter(filterConfig,
95                  "beforeSessionAttribute", true);
96          afterSessionAttribute = getBooleanParameter(filterConfig,
97                  "afterSessionAttribute", true);
98          afterResponse = getBooleanParameter(filterConfig, "afterResponse", true);
99  
100         final StringBuffer sb = new StringBuffer();
101         RequestDumpUtil.dumpContextProperties(sb, filterConfig
102                 .getServletContext(), LF, INDENT);
103         logger.debug(sb.toString());
104     }
105 
106     public void destroy() {
107         config = null;
108     }
109 
110     public void doFilter(final ServletRequest request,
111             final ServletResponse response, final FilterChain chain)
112             throws IOException, ServletException {
113         if (config == null) {
114             return;
115         }
116         if (!(request instanceof HttpServletRequest)
117                 || !(response instanceof HttpServletResponse)) {
118             chain.doFilter(request, response);
119             return;
120         }
121         final HttpServletRequest hrequest = (HttpServletRequest) request;
122         final HttpServletResponse hresponse = (HttpServletResponse) response;
123         dumpBefore(hrequest);
124         try {
125             chain.doFilter(request, response);
126         } finally {
127             dumpAfter(hrequest, hresponse);
128         }
129     }
130 
131     private void dumpBefore(final HttpServletRequest request) {
132         final ServletContext context = config.getServletContext();
133         final StringBuffer sb = new StringBuffer();
134         sb.append(LF);
135         sb.append(LF);
136         sb.append("** before *****************************************: ");
137         sb.append(gerServletPath(request));
138         sb.append(LF);
139         RequestDumpUtil.dumpRequestProperties(sb, request, LF, INDENT);
140         RequestDumpUtil.dumpSessionProperties(sb, request, LF, INDENT);
141         if (beforeRequestParameter) {
142             RequestDumpUtil.dumpRequestParameters(sb, request, LF, INDENT);
143         }
144         if (beforeRequestAttribute) {
145             RequestDumpUtil.dumpRequestAttributes(sb, request, LF, INDENT);
146         }
147         if (beforeCookies) {
148             RequestDumpUtil.dumpCookies(sb, request, LF, INDENT);
149         }
150         if (beforeRequestHeader) {
151             RequestDumpUtil.dumpRequestHeaders(sb, request, LF, INDENT);
152         }
153         if (beforeSessionAttribute) {
154             RequestDumpUtil.dumpSessionAttributes(sb, request, LF, INDENT);
155         }
156         if (beforeContextAttribute) {
157             RequestDumpUtil.dumpContextAttributes(sb, context, LF, INDENT);
158         }
159         logger.debug(sb.toString());
160     }
161 
162     private void dumpAfter(final HttpServletRequest request,
163             final HttpServletResponse response) {
164         final StringBuffer sb = new StringBuffer();
165         sb.append(LF);
166         sb.append(LF);
167         sb.append("** after *****************************************: ");
168         sb.append(gerServletPath(request));
169         sb.append(LF);
170         if (afterResponse) {
171             RequestDumpUtil.dumpResponseProperties(sb, response, LF, INDENT);
172         }
173         if (afterRequestParameter) {
174             RequestDumpUtil.dumpRequestParameters(sb, request, LF, INDENT);
175         }
176         if (afterRequestAttribute) {
177             RequestDumpUtil.dumpRequestAttributes(sb, request, LF, INDENT);
178         }
179         if (afterCookies) {
180             RequestDumpUtil.dumpCookies(sb, request, LF, INDENT);
181         }
182         if (afterRequestHeader) {
183             RequestDumpUtil.dumpRequestHeaders(sb, request, LF, INDENT);
184         }
185         if (afterSessionAttribute) {
186             RequestDumpUtil.dumpSessionAttributes(sb, request, LF, INDENT);
187         }
188         if (afterContextAttribute) {
189             RequestDumpUtil.dumpContextAttributes(sb, config
190                     .getServletContext(), LF, INDENT);
191         }
192         logger.debug(sb.toString());
193     }
194 
195     private String gerServletPath(final ServletRequest request) {
196         if (request instanceof HttpServletRequest) {
197             return ((HttpServletRequest) request).getServletPath();
198         }
199         return "";
200     }
201 
202     public String toString() {
203         if (config == null) {
204             return ("RequestDumpFilter()");
205         }
206         final StringBuffer sb = new StringBuffer("RequestDumpFilter(");
207         sb.append(config);
208         sb.append(")");
209         return (sb.toString());
210     }
211 
212     private boolean getBooleanParameter(final FilterConfig filterConfig,
213             final String name, final boolean defaultValue) {
214         final String value = filterConfig.getInitParameter(name);
215         if (value == null) {
216             return defaultValue;
217         }
218         return BooleanConversionUtil.toPrimitiveBoolean(value);
219     }
220 
221 }