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 import org.mortbay.log.Log;
35
36
37
38
39
40
41
42
43
44
45 public class TestFilter implements Filter
46 {
47 private boolean _remote;
48 private ServletContext _context;
49 private final Set _allowed = new HashSet();
50
51
52
53
54
55 public void init(FilterConfig filterConfig) throws ServletException
56 {
57 _context= filterConfig.getServletContext();
58 _remote=Boolean.parseBoolean(filterConfig.getInitParameter("remote"));
59 _allowed.add("/favicon.ico");
60 _allowed.add("/jetty_banner.gif");
61
62 Log.debug("TestFilter#remote="+_remote);
63 }
64
65
66
67
68
69 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
70 throws IOException, ServletException
71 {
72 String from = request.getRemoteHost();
73 String to = request.getServerName();
74 String path=((HttpServletRequest)request).getServletPath();
75
76 if (!_remote && !_allowed.contains(path) && (
77 !from.equals("localhost") && !from.startsWith("127.") && from.indexOf(":1")<0 ||
78 !to.equals("localhost")&&!to.startsWith("127.0.0.") && to.indexOf(":1")<0))
79 {
80 System.err.println("REMOTE "+from+" "+to+" "+path);
81 if ("/".equals(path))
82 _context.getRequestDispatcher("/remote.html").forward(request,response);
83 else
84 ((HttpServletResponse)response).sendRedirect("/remote.html");
85 return;
86 }
87
88 Integer old_value=null;
89 ServletRequest r = request;
90 while (r instanceof ServletRequestWrapper)
91 r=((ServletRequestWrapper)r).getRequest();
92
93 try
94 {
95 old_value=(Integer)request.getAttribute("testFilter");
96
97 Integer value=(old_value==null)?new Integer(1):new Integer(old_value.intValue()+1);
98
99 request.setAttribute("testFilter", value);
100
101 String qString = ((HttpServletRequest)request).getQueryString();
102 if (qString != null && qString.indexOf("wrap")>=0)
103 {
104 request=new HttpServletRequestWrapper((HttpServletRequest)request);
105 }
106 _context.setAttribute("request"+r.hashCode(),value);
107
108 chain.doFilter(request, response);
109 }
110 finally
111 {
112 request.setAttribute("testFilter", old_value);
113 _context.setAttribute("request"+r.hashCode(),old_value);
114 }
115 }
116
117
118
119
120
121 public void destroy()
122 {
123 }
124
125 }