1 // ========================================================================
2 // Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
3 // ------------------------------------------------------------------------
4 // All rights reserved. This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v1.0
6 // and Apache License v2.0 which accompanies this distribution.
7 // The Eclipse Public License is available at
8 // http://www.eclipse.org/legal/epl-v10.html
9 // The Apache License v2.0 is available at
10 // http://www.opensource.org/licenses/apache2.0.php
11 // You may elect to redistribute this code under either of these licenses.
12 // ========================================================================
13
14 package com.acme;
15
16 import java.io.IOException;
17
18 import javax.servlet.Filter;
19 import javax.servlet.FilterChain;
20 import javax.servlet.FilterConfig;
21 import javax.servlet.ServletContext;
22 import javax.servlet.ServletException;
23 import javax.servlet.ServletRequest;
24 import javax.servlet.ServletRequestWrapper;
25 import javax.servlet.ServletResponse;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletRequestWrapper;
28
29 /* ------------------------------------------------------------ */
30 /** TestFilter.
31 *
32 *
33 */
34 public class TestFilter implements Filter
35 {
36 private ServletContext _context;
37
38 /* ------------------------------------------------------------ */
39 /*
40 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
41 */
42 public void init(FilterConfig filterConfig) throws ServletException
43 {
44 _context= filterConfig.getServletContext();
45 }
46
47 /* ------------------------------------------------------------ */
48 /*
49 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
50 */
51 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
52 throws IOException, ServletException
53 {
54 Integer old_value=null;
55 ServletRequest r = request;
56 while (r instanceof ServletRequestWrapper)
57 r=((ServletRequestWrapper)r).getRequest();
58
59 try
60 {
61 old_value=(Integer)request.getAttribute("testFilter");
62
63 Integer value=(old_value==null)?new Integer(1):new Integer(old_value.intValue()+1);
64
65 request.setAttribute("testFilter", value);
66
67 String qString = ((HttpServletRequest)request).getQueryString();
68 if (qString != null && qString.indexOf("wrap")>=0)
69 {
70 request=new HttpServletRequestWrapper((HttpServletRequest)request);
71 }
72 _context.setAttribute("request"+r.hashCode(),value);
73
74 chain.doFilter(request, response);
75 }
76 finally
77 {
78 request.setAttribute("testFilter", old_value);
79 _context.setAttribute("request"+r.hashCode(),old_value);
80 }
81 }
82
83 /* ------------------------------------------------------------ */
84 /*
85 * @see javax.servlet.Filter#destroy()
86 */
87 public void destroy()
88 {
89 }
90
91 }