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