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 import org.eclipse.jetty.util.log.Log;
33 import org.eclipse.jetty.util.log.Logger;
34
35
36
37
38
39
40
41
42
43 public class TestFilter implements Filter
44 {
45 private static final Logger LOG = Log.getLogger(TestFilter.class);
46
47 private boolean _remote;
48 private ServletContext _context;
49 private final Set<String> _allowed = new HashSet<String>();
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.html".equals(path) && !_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 if ("/".equals(path))
81 _context.getRequestDispatcher("/remote.html").forward(request,response);
82 else
83 ((HttpServletResponse)response).sendRedirect("/remote.html");
84 return;
85 }
86
87 Integer old_value=null;
88 ServletRequest r = request;
89 while (r instanceof ServletRequestWrapper)
90 r=((ServletRequestWrapper)r).getRequest();
91
92 try
93 {
94 old_value=(Integer)request.getAttribute("testFilter");
95
96 Integer value=(old_value==null)?new Integer(1):new Integer(old_value.intValue()+1);
97
98 request.setAttribute("testFilter", value);
99
100 String qString = ((HttpServletRequest)request).getQueryString();
101 if (qString != null && qString.indexOf("wrap")>=0)
102 {
103 request=new HttpServletRequestWrapper((HttpServletRequest)request);
104 }
105 _context.setAttribute("request"+r.hashCode(),value);
106
107 chain.doFilter(request, response);
108 }
109 finally
110 {
111 request.setAttribute("testFilter", old_value);
112 _context.setAttribute("request"+r.hashCode(),old_value);
113 }
114 }
115
116
117
118
119
120 public void destroy()
121 {
122 }
123
124 }