1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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 }