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 final Logger logger = Logger.getLogger(this.getClass());
40  
41      private FilterConfig config = null;
42  
43      private boolean beforeRequestParameter;
44  
45      private boolean afterRequestParameter;
46  
47      private boolean beforeRequestAttribute;
48  
49      private boolean afterRequestAttribute;
50  
51      private boolean beforeCookies;
52  
53      private boolean afterCookies;
54  
55      private boolean beforeRequestHeader;
56  
57      private boolean afterRequestHeader;
58  
59      private boolean beforeSessionAttribute;
60  
61      private boolean afterSessionAttribute;
62  
63      private boolean beforeContextAttribute;
64  
65      private boolean afterContextAttribute;
66  
67      private boolean afterResponse;
68  
69      private static final String INDENT = "  ";
70  
71      private static final String LF = System.getProperty("line.separator");
72  
73      public void init(final FilterConfig filterConfig) throws ServletException {
74          this.config = filterConfig;
75          beforeRequestParameter = getBooleanParameter(filterConfig,
76                  "beforeRequestParameter", true);
77          afterRequestParameter = getBooleanParameter(filterConfig,
78                  "afterRequestParameter", false);
79          beforeRequestAttribute = getBooleanParameter(filterConfig,
80                  "beforeRequestAttribute", true);
81          afterRequestAttribute = getBooleanParameter(filterConfig,
82                  "afterRequestAttribute", true);
83          beforeRequestHeader = getBooleanParameter(filterConfig,
84                  "beforeRequestHeader", true);
85          afterRequestHeader = getBooleanParameter(filterConfig,
86                  "afterRequestHeader", false);
87          beforeContextAttribute = getBooleanParameter(filterConfig,
88                  "beforeContextAttribute", true);
89          afterContextAttribute = getBooleanParameter(filterConfig,
90                  "afterContextAttribute", true);
91          beforeCookies = getBooleanParameter(filterConfig, "beforeCookies", true);
92          afterCookies = getBooleanParameter(filterConfig, "afterCookies", true);
93          beforeSessionAttribute = getBooleanParameter(filterConfig,
94                  "beforeSessionAttribute", true);
95          afterSessionAttribute = getBooleanParameter(filterConfig,
96                  "afterSessionAttribute", true);
97          afterResponse = getBooleanParameter(filterConfig, "afterResponse", true);
98  
99          final StringBuffer sb = new StringBuffer();
100         RequestDumpUtil.dumpContextProperties(sb, filterConfig
101                 .getServletContext(), LF, INDENT);
102         logger.debug(sb.toString());
103     }
104 
105     public void destroy() {
106         config = null;
107     }
108 
109     public void doFilter(final ServletRequest request,
110             final ServletResponse response, final FilterChain chain)
111             throws IOException, ServletException {
112         if (config == null) {
113             return;
114         }
115         if (!(request instanceof HttpServletRequest)
116                 || !(response instanceof HttpServletResponse)) {
117             chain.doFilter(request, response);
118             return;
119         }
120         final HttpServletRequest hrequest = (HttpServletRequest) request;
121         final HttpServletResponse hresponse = (HttpServletResponse) response;
122         dumpBefore(hrequest);
123         try {
124             chain.doFilter(request, response);
125         } finally {
126             dumpAfter(hrequest, hresponse);
127         }
128     }
129 
130     private void dumpBefore(final HttpServletRequest request) {
131         final ServletContext context = config.getServletContext();
132         final StringBuffer sb = new StringBuffer();
133         sb.append(LF);
134         sb.append(LF);
135         sb.append("** before *****************************************: ");
136         sb.append(gerServletPath(request));
137         sb.append(LF);
138         RequestDumpUtil.dumpRequestProperties(sb, request, LF, INDENT);
139         RequestDumpUtil.dumpSessionProperties(sb, request, LF, INDENT);
140         if (beforeRequestParameter) {
141             RequestDumpUtil.dumpRequestParameters(sb, request, LF, INDENT);
142         }
143         if (beforeRequestAttribute) {
144             RequestDumpUtil.dumpRequestAttributes(sb, request, LF, INDENT);
145         }
146         if (beforeCookies) {
147             RequestDumpUtil.dumpCookies(sb, request, LF, INDENT);
148         }
149         if (beforeRequestHeader) {
150             RequestDumpUtil.dumpRequestHeaders(sb, request, LF, INDENT);
151         }
152         if (beforeSessionAttribute) {
153             RequestDumpUtil.dumpSessionAttributes(sb, request, LF, INDENT);
154         }
155         if (beforeContextAttribute) {
156             RequestDumpUtil.dumpContextAttributes(sb, context, LF, INDENT);
157         }
158         logger.debug(sb.toString());
159     }
160 
161     private void dumpAfter(final HttpServletRequest request,
162             final HttpServletResponse response) {
163         final StringBuffer sb = new StringBuffer();
164         sb.append(LF);
165         sb.append(LF);
166         sb.append("** after *****************************************: ");
167         sb.append(gerServletPath(request));
168         sb.append(LF);
169         if (afterResponse) {
170             RequestDumpUtil.dumpResponseProperties(sb, response, LF, INDENT);
171         }
172         if (afterRequestParameter) {
173             RequestDumpUtil.dumpRequestParameters(sb, request, LF, INDENT);
174         }
175         if (afterRequestAttribute) {
176             RequestDumpUtil.dumpRequestAttributes(sb, request, LF, INDENT);
177         }
178         if (afterCookies) {
179             RequestDumpUtil.dumpCookies(sb, request, LF, INDENT);
180         }
181         if (afterRequestHeader) {
182             RequestDumpUtil.dumpRequestHeaders(sb, request, LF, INDENT);
183         }
184         if (afterSessionAttribute) {
185             RequestDumpUtil.dumpSessionAttributes(sb, request, LF, INDENT);
186         }
187         if (afterContextAttribute) {
188             RequestDumpUtil.dumpContextAttributes(sb, config
189                     .getServletContext(), LF, INDENT);
190         }
191         logger.debug(sb.toString());
192     }
193 
194     private String gerServletPath(final ServletRequest request) {
195         if (request instanceof HttpServletRequest) {
196             return ((HttpServletRequest) request).getServletPath();
197         }
198         return "";
199     }
200 
201     public String toString() {
202         if (config == null) {
203             return ("RequestDumpFilter()");
204         }
205         final StringBuffer sb = new StringBuffer("RequestDumpFilter(");
206         sb.append(config);
207         sb.append(")");
208         return (sb.toString());
209     }
210 
211     private boolean getBooleanParameter(final FilterConfig filterConfig,
212             final String name, final boolean defaultValue) {
213         final String value = filterConfig.getInitParameter(name);
214         if (value == null) {
215             return defaultValue;
216         }
217         return BooleanConversionUtil.toPrimitiveBoolean(value);
218     }
219 
220 }