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