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