Author: markt Date: Sat May 4 09:09:39 2013 New Revision: 1479061 URL: http://svn.apache.org/r1479061 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54926 Re-order the validation checks. Order is now: - Is this a WebSocket upgrade? - Is there a matching endpoint? - Validate remaining headers
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java?rev=1479061&r1=1479060&r2=1479061&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Sat May 4 09:09:39 2013 @@ -85,11 +85,29 @@ public class WsFilter implements Filter } // HTTP request with an upgrade header for WebSocket present - // Validate the rest of the headers and reject the request if that - // validation fails HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; + // Check to see if this WebSocket implementation has a matching mapping + WsServerContainer sc = WsServerContainer.getServerContainer(); + String path; + String pathInfo = req.getPathInfo(); + if (pathInfo == null) { + path = req.getServletPath(); + } else { + path = req.getServletPath() + pathInfo; + } + WsMappingResult mappingResult = sc.findMapping(path); + + if (mappingResult == null) { + // No endpoint registered for the requested path. Let the + // application handle it (it might redirect or forward for example) + chain.doFilter(request, response); + return; + } + + // Validate the rest of the headers and reject the request if that + // validation fails String key; String subProtocol = null; List<Extension> extensions = Collections.emptyList(); @@ -111,24 +129,6 @@ public class WsFilter implements Filter return; } - // Need an Endpoint instance to progress this further - WsServerContainer sc = WsServerContainer.getServerContainer(); - String path; - String pathInfo = req.getPathInfo(); - if (pathInfo == null) { - path = req.getServletPath(); - } else { - path = req.getServletPath() + pathInfo; - } - WsMappingResult mappingResult = sc.findMapping(path); - - if (mappingResult == null) { - // No endpoint registered for the requested path. Let the - // application handle it (it might redirect or forward for example) - chain.doFilter(request, response); - return; - } - ServerEndpointConfig sec = mappingResult.getConfig(); // Origin check @@ -145,6 +145,7 @@ public class WsFilter implements Filter getNegotiatedSubprotocol( sec.getSubprotocols(), subProtocols); } + // Extensions // Currently no extensions are supported by this implementation @@ -199,7 +200,6 @@ public class WsFilter implements Filter req.upgrade(WsHttpUpgradeHandler.class); wsHandler.preInit(ep, sec, sc, wsRequest, subProtocol, mappingResult.getPathParams(), req.isSecure()); - } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org