X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fserver%2Fhandler%2FContextHandler.java;h=928f850b06aaba27004f638a46d29665645fd743;hp=397cde1fd13c2d3d4ddd037740c8f61cbd52ae85;hb=ba4f228fa9f72d50991a2218cfd83987ef5d385e;hpb=875b5e9651498a0cd8e0001c0742ba843e47cad0 diff --git a/lib/jetty/org/eclipse/jetty/server/handler/ContextHandler.java b/lib/jetty/org/eclipse/jetty/server/handler/ContextHandler.java index 397cde1f..928f850b 100644 --- a/lib/jetty/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/lib/jetty/org/eclipse/jetty/server/handler/ContextHandler.java @@ -1,6 +1,6 @@ // // ======================================================================== -// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 @@ -36,7 +36,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -67,7 +66,6 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.ClassLoaderDump; -import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Dispatcher; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HandlerContainer; @@ -107,8 +105,8 @@ import org.eclipse.jetty.util.resource.Resource; public class ContextHandler extends ScopedHandler implements Attributes, Graceful { public final static int SERVLET_MAJOR_VERSION=3; - public final static int SERVLET_MINOR_VERSION=0; - public static final Class[] SERVLET_LISTENER_TYPES = new Class[] {ServletContextListener.class, + public final static int SERVLET_MINOR_VERSION=1; + public static final Class[] SERVLET_LISTENER_TYPES = new Class[] {ServletContextListener.class, ServletContextAttributeListener.class, ServletRequestListener.class, ServletRequestAttributeListener.class}; @@ -510,8 +508,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu /* * @see javax.servlet.ServletContext#getInitParameterNames() */ - @SuppressWarnings("rawtypes") - public Enumeration getInitParameterNames() + public Enumeration getInitParameterNames() { return Collections.enumeration(_initParams.keySet()); } @@ -771,7 +768,9 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu _managedAttributes = new HashMap(); String[] attributes = managedAttributes.split(","); for (String attribute : attributes) - _managedAttributes.put(attribute,null); + { + _managedAttributes.put(attribute.trim(),null); + } Enumeration e = _scontext.getAttributeNames(); while (e.hasMoreElements()) @@ -796,14 +795,16 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu /* ------------------------------------------------------------ */ protected void callContextInitialized (ServletContextListener l, ServletContextEvent e) { - LOG.debug("contextInitialized: {}->{}",e,l); + if (LOG.isDebugEnabled()) + LOG.debug("contextInitialized: {}->{}",e,l); l.contextInitialized(e); } /* ------------------------------------------------------------ */ protected void callContextDestroyed (ServletContextListener l, ServletContextEvent e) { - LOG.debug("contextDestroyed: {}->{}",e,l); + if (LOG.isDebugEnabled()) + LOG.debug("contextDestroyed: {}->{}",e,l); l.contextDestroyed(e); } @@ -871,27 +872,8 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu _scontext.clearAttributes(); } - /* ------------------------------------------------------------ */ - /* - * @see org.eclipse.jetty.server.Handler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) - */ - public boolean checkContext(final String target, final Request baseRequest, final HttpServletResponse response) throws IOException + public boolean checkVirtualHost(final Request baseRequest) { - DispatcherType dispatch = baseRequest.getDispatcherType(); - - switch (_availability) - { - case SHUTDOWN: - case UNAVAILABLE: - baseRequest.setHandled(true); - response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); - return false; - default: - if ((DispatcherType.REQUEST.equals(dispatch) && baseRequest.isHandled())) - return false; - } - - // Check the vhosts if (_vhosts != null && _vhosts.length > 0) { String vhost = normalizeHostname(baseRequest.getServerName()); @@ -927,27 +909,61 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu if (!match || connectorName && !connectorMatch) return false; } - + return true; + } + + public boolean checkContextPath(String uri) + { // Are we not the root context? if (_contextPath.length() > 1) { // reject requests that are not for us - if (!target.startsWith(_contextPath)) + if (!uri.startsWith(_contextPath)) return false; - if (target.length() > _contextPath.length() && target.charAt(_contextPath.length()) != '/') + if (uri.length() > _contextPath.length() && uri.charAt(_contextPath.length()) != '/') return false; + } + return true; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.jetty.server.Handler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + */ + public boolean checkContext(final String target, final Request baseRequest, final HttpServletResponse response) throws IOException + { + DispatcherType dispatch = baseRequest.getDispatcherType(); - // redirect null path infos - if (!_allowNullPathInfo && _contextPath.length() == target.length()) - { - // context request must end with / + // Check the vhosts + if (!checkVirtualHost(baseRequest)) + return false; + + if (!checkContextPath(target)) + return false; + + // Are we not the root context? + // redirect null path infos + if (!_allowNullPathInfo && _contextPath.length() == target.length() && _contextPath.length()>1) + { + // context request must end with / + baseRequest.setHandled(true); + if (baseRequest.getQueryString() != null) + response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH) + "?" + baseRequest.getQueryString()); + else + response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH)); + return false; + } + + switch (_availability) + { + case SHUTDOWN: + case UNAVAILABLE: baseRequest.setHandled(true); - if (baseRequest.getQueryString() != null) - response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH) + "?" + baseRequest.getQueryString()); - else - response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH)); + response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); return false; - } + default: + if ((DispatcherType.REQUEST.equals(dispatch) && baseRequest.isHandled())) + return false; } return true; @@ -1127,7 +1143,6 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu if (!_requestAttributeListeners.isEmpty()) { - ListIterator iter = _requestAttributeListeners.listIterator(_requestAttributeListeners.size()); for (int i=_requestAttributeListeners.size();i-->0;) baseRequest.removeEventListener(_requestAttributeListeners.get(i)); } @@ -1646,10 +1661,15 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu } /* ------------------------------------------------------------ */ + /** + * @param path + * @param resource + * @return True if the alias is OK + */ public boolean checkAlias(String path, Resource resource) { // Is the resource aliased? - if (resource.getAlias() != null) + if (resource.getAlias() != null) { if (LOG.isDebugEnabled()) LOG.debug("Aliased resource: " + resource + "~=" + resource.getAlias()); @@ -1878,7 +1898,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu matched_path = context_path; } - if (matched_path.equals(context_path)) + if (matched_path != null && matched_path.equals(context_path)) contexts.add(ch); } } @@ -2056,7 +2076,6 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu /* * @see javax.servlet.ServletContext#getInitParameterNames() */ - @SuppressWarnings("unchecked") @Override public Enumeration getInitParameterNames() { @@ -2193,6 +2212,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu try { + @SuppressWarnings("unchecked") Class clazz = _classLoader==null?Loader.loadClass(ContextHandler.class,className):_classLoader.loadClass(className); addListener(clazz); } @@ -2287,9 +2307,9 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu //classloader, or a parent of it try { - Class reflect = Loader.loadClass(getClass(), "sun.reflect.Reflection"); + Class reflect = Loader.loadClass(getClass(), "sun.reflect.Reflection"); Method getCallerClass = reflect.getMethod("getCallerClass", Integer.TYPE); - Class caller = (Class)getCallerClass.invoke(null, 2); + Class caller = (Class)getCallerClass.invoke(null, 2); boolean ok = false; ClassLoader callerLoader = caller.getClassLoader(); @@ -2428,6 +2448,11 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu @Override public String getServerInfo() { + // NOTE: DO NOT CHANGE + // this is used by weld to detect Jetty + // implementation version + // See: https://github.com/weld/core/blob/master/environments/servlet/core/src/main/java/org/jboss/weld/environment/jetty/JettyContainer.java + // and its touch(ContainerContext) method return "jetty/" + Server.getVersion(); }