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 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 }