1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.acme;
20
21 import java.io.IOException;
22 import java.util.HashSet;
23 import java.util.Set;
24
25 import javax.servlet.Filter;
26 import javax.servlet.FilterChain;
27 import javax.servlet.FilterConfig;
28 import javax.servlet.ServletContext;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletRequest;
31 import javax.servlet.ServletRequestWrapper;
32 import javax.servlet.ServletResponse;
33 import javax.servlet.http.HttpServletRequest;
34 import javax.servlet.http.HttpServletRequestWrapper;
35 import javax.servlet.http.HttpServletResponse;
36
37 import org.eclipse.jetty.util.log.Log;
38 import org.eclipse.jetty.util.log.Logger;
39
40
41
42
43
44
45
46
47
48 public class TestFilter implements Filter
49 {
50 private static final Logger LOG = Log.getLogger(TestFilter.class);
51
52 private boolean _remote;
53 private ServletContext _context;
54 private final Set<String> _allowed = new HashSet<String>();
55
56
57
58
59
60 @Override
61 public void init(FilterConfig filterConfig) throws ServletException
62 {
63 _context= filterConfig.getServletContext();
64 _remote=Boolean.parseBoolean(filterConfig.getInitParameter("remote"));
65 _allowed.add("/favicon.ico");
66 _allowed.add("/jetty_banner.gif");
67 _allowed.add("/remote.html");
68
69 LOG.debug("TestFilter#remote="+_remote);
70 }
71
72
73
74
75
76 @Override
77 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
78 throws IOException, ServletException
79 {
80 String from = request.getRemoteAddr();
81 String to = request.getLocalAddr();
82 String path=((HttpServletRequest)request).getServletPath();
83
84 if (!_remote && !_allowed.contains(path) && !from.equals(to))
85 {
86 _context.getRequestDispatcher("/remote.html").forward(request,response);
87 return;
88 }
89
90 Integer old_value=null;
91 ServletRequest r = request;
92 while (r instanceof ServletRequestWrapper)
93 r=((ServletRequestWrapper)r).getRequest();
94
95 try
96 {
97 old_value=(Integer)request.getAttribute("testFilter");
98
99 Integer value=(old_value==null)?new Integer(1):new Integer(old_value.intValue()+1);
100
101 request.setAttribute("testFilter", value);
102
103 String qString = ((HttpServletRequest)request).getQueryString();
104 if (qString != null && qString.indexOf("wrap")>=0)
105 {
106 request=new HttpServletRequestWrapper((HttpServletRequest)request);
107 }
108 _context.setAttribute("request"+r.hashCode(),value);
109
110 chain.doFilter(request, response);
111 }
112 finally
113 {
114 request.setAttribute("testFilter", old_value);
115 _context.setAttribute("request"+r.hashCode(),old_value);
116 }
117 }
118
119
120
121
122
123 @Override
124 public void destroy()
125 {
126 }
127
128 }