Fixes #338092 (ProxyServlet leaks memory).
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2830 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
f5cb64ff54
commit
8020110283
|
@ -23,6 +23,7 @@ jetty-7.3.1-SNAPSHOT
|
||||||
+ JETTY-1335 HttpClient's SelectConnector clean-up
|
+ JETTY-1335 HttpClient's SelectConnector clean-up
|
||||||
+ JETTY-1333 HttpClient _timeout and _soTimeout is messed up
|
+ JETTY-1333 HttpClient _timeout and _soTimeout is messed up
|
||||||
+ 338068 Leaking ConstraintMappings on redeploy
|
+ 338068 Leaking ConstraintMappings on redeploy
|
||||||
|
+ 338092 ProxyServlet leaks memory
|
||||||
|
|
||||||
jetty-7.3.0.v20110203 3 February 2011
|
jetty-7.3.0.v20110203 3 February 2011
|
||||||
+ JETTY-1259 NullPointerException in JDBCSessionIdManager when invalidating session (further update)
|
+ JETTY-1259 NullPointerException in JDBCSessionIdManager when invalidating session (further update)
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.servlets;
|
package org.eclipse.jetty.servlets;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
@ -28,7 +27,6 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import javax.servlet.Servlet;
|
import javax.servlet.Servlet;
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
@ -77,7 +75,7 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
* <li>whiteList - comma-separated list of allowed proxy destinations
|
* <li>whiteList - comma-separated list of allowed proxy destinations
|
||||||
* <li>blackList - comma-separated list of forbidden proxy destinations
|
* <li>blackList - comma-separated list of forbidden proxy destinations
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @see org.eclipse.jetty.server.handler.ConnectHandler
|
* @see org.eclipse.jetty.server.handler.ConnectHandler
|
||||||
*/
|
*/
|
||||||
public class ProxyServlet implements Servlet
|
public class ProxyServlet implements Servlet
|
||||||
|
@ -142,7 +140,7 @@ public class ProxyServlet implements Servlet
|
||||||
_context.setAttribute(config.getServletName()+".ThreadPool",_client.getThreadPool());
|
_context.setAttribute(config.getServletName()+".ThreadPool",_client.getThreadPool());
|
||||||
_context.setAttribute(config.getServletName()+".HttpClient",_client);
|
_context.setAttribute(config.getServletName()+".HttpClient",_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
String white = config.getInitParameter("whiteList");
|
String white = config.getInitParameter("whiteList");
|
||||||
if (white != null)
|
if (white != null)
|
||||||
{
|
{
|
||||||
|
@ -160,11 +158,23 @@ public class ProxyServlet implements Servlet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void destroy()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_client.stop();
|
||||||
|
}
|
||||||
|
catch (Exception x)
|
||||||
|
{
|
||||||
|
_log.debug(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Helper function to process a parameter value containing a list
|
* Helper function to process a parameter value containing a list
|
||||||
* of new entries and initialize the specified host map.
|
* of new entries and initialize the specified host map.
|
||||||
*
|
*
|
||||||
* @param list comma-separated list of new entries
|
* @param list comma-separated list of new entries
|
||||||
* @param hostMap target host map
|
* @param hostMap target host map
|
||||||
*/
|
*/
|
||||||
|
@ -174,16 +184,16 @@ public class ProxyServlet implements Servlet
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
String entry;
|
String entry;
|
||||||
|
|
||||||
StringTokenizer entries = new StringTokenizer(list, ",");
|
StringTokenizer entries = new StringTokenizer(list, ",");
|
||||||
while(entries.hasMoreTokens())
|
while(entries.hasMoreTokens())
|
||||||
{
|
{
|
||||||
entry = entries.nextToken();
|
entry = entries.nextToken();
|
||||||
idx = entry.indexOf('/');
|
idx = entry.indexOf('/');
|
||||||
|
|
||||||
String host = idx > 0 ? entry.substring(0,idx) : entry;
|
String host = idx > 0 ? entry.substring(0,idx) : entry;
|
||||||
String path = idx > 0 ? entry.substring(idx) : "/*";
|
String path = idx > 0 ? entry.substring(idx) : "/*";
|
||||||
|
|
||||||
host = host.trim();
|
host = host.trim();
|
||||||
PathMap pathMap = hostMap.get(host);
|
PathMap pathMap = hostMap.get(host);
|
||||||
if (pathMap == null)
|
if (pathMap == null)
|
||||||
|
@ -198,11 +208,11 @@ public class ProxyServlet implements Servlet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Check the request hostname and path against white- and blacklist.
|
* Check the request hostname and path against white- and blacklist.
|
||||||
*
|
*
|
||||||
* @param host hostname to check
|
* @param host hostname to check
|
||||||
* @param path path to check
|
* @param path path to check
|
||||||
* @return true if request is allowed to be proxied
|
* @return true if request is allowed to be proxied
|
||||||
|
@ -212,9 +222,9 @@ public class ProxyServlet implements Servlet
|
||||||
if (_white.size()>0)
|
if (_white.size()>0)
|
||||||
{
|
{
|
||||||
boolean match = false;
|
boolean match = false;
|
||||||
|
|
||||||
Object whiteObj = _white.getLazyMatches(host);
|
Object whiteObj = _white.getLazyMatches(host);
|
||||||
if (whiteObj != null)
|
if (whiteObj != null)
|
||||||
{
|
{
|
||||||
List whiteList = (whiteObj instanceof List) ? (List)whiteObj : Collections.singletonList(whiteObj);
|
List whiteList = (whiteObj instanceof List) ? (List)whiteObj : Collections.singletonList(whiteObj);
|
||||||
|
|
||||||
|
@ -233,10 +243,10 @@ public class ProxyServlet implements Servlet
|
||||||
if (_black.size() > 0)
|
if (_black.size() > 0)
|
||||||
{
|
{
|
||||||
Object blackObj = _black.getLazyMatches(host);
|
Object blackObj = _black.getLazyMatches(host);
|
||||||
if (blackObj != null)
|
if (blackObj != null)
|
||||||
{
|
{
|
||||||
List blackList = (blackObj instanceof List) ? (List)blackObj : Collections.singletonList(blackObj);
|
List blackList = (blackObj instanceof List) ? (List)blackObj : Collections.singletonList(blackObj);
|
||||||
|
|
||||||
for (Object entry: blackList)
|
for (Object entry: blackList)
|
||||||
{
|
{
|
||||||
PathMap pathMap = ((Map.Entry<String, PathMap>)entry).getValue();
|
PathMap pathMap = ((Map.Entry<String, PathMap>)entry).getValue();
|
||||||
|
@ -245,7 +255,7 @@ public class ProxyServlet implements Servlet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,7 +556,7 @@ public class ProxyServlet implements Servlet
|
||||||
{
|
{
|
||||||
if (!validateDestination(serverName, uri))
|
if (!validateDestination(serverName, uri))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new HttpURI(scheme+"://"+serverName+":"+serverPort+uri);
|
return new HttpURI(scheme+"://"+serverName+":"+serverPort+uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,14 +569,6 @@ public class ProxyServlet implements Servlet
|
||||||
return "Proxy Servlet";
|
return "Proxy Servlet";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see javax.servlet.Servlet#destroy()
|
|
||||||
*/
|
|
||||||
public void destroy()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transparent Proxy.
|
* Transparent Proxy.
|
||||||
*
|
*
|
||||||
|
@ -641,9 +643,9 @@ public class ProxyServlet implements Servlet
|
||||||
{
|
{
|
||||||
if (!uri.startsWith(_prefix))
|
if (!uri.startsWith(_prefix))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
URI dstUri = new URI(_proxyTo + uri.substring(_prefix.length())).normalize();
|
URI dstUri = new URI(_proxyTo + uri.substring(_prefix.length())).normalize();
|
||||||
|
|
||||||
if (!validateDestination(dstUri.getHost(),dstUri.getPath()))
|
if (!validateDestination(dstUri.getHost(),dstUri.getPath()))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue