1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.filter;
20
21 import java.io.IOException;
22
23 import java.util.regex.Pattern;
24
25 import javax.servlet.Filter;
26 import javax.servlet.FilterChain;
27 import javax.servlet.FilterConfig;
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletRequest;
32
33
34
35
36
37
38 public class ProxyFilter implements Filter
39 {
40 public static final String PARAM_TRUSTED_PROXIES = "trustedProxies";
41 private Pattern trustedProxies;
42
43 public void init( FilterConfig filterConfig ) throws ServletException
44 {
45 trustedProxies = null;
46
47 String trustedProxiesString = filterConfig.getInitParameter( PARAM_TRUSTED_PROXIES );
48
49 if ( trustedProxiesString != null )
50 {
51 try
52 {
53 trustedProxies = Pattern.compile( trustedProxiesString );
54 }
55 catch ( Exception e )
56 {
57 throw new ServletException( "Could not compile trustedProxies parameter: " + e, e );
58 }
59 }
60 }
61
62 public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain )
63 throws IOException, ServletException
64 {
65
66 if ( ( trustedProxies != null ) && ( request instanceof HttpServletRequest ) &&
67 trustedProxies.matcher( request.getRemoteAddr( ) ).matches( ) )
68 {
69 request = new ProxyHttpServletRequestWrapper( (HttpServletRequest) request );
70 }
71
72
73 chain.doFilter( request, response );
74 }
75
76 public void destroy( )
77 {
78 }
79 }