diff options
author | Joakim Erdfelt | 2014-09-18 18:11:31 +0000 |
---|---|---|
committer | Joakim Erdfelt | 2014-09-18 18:11:31 +0000 |
commit | 9b7b54ea0b7eae2dc31986963874b4ae3fbbdba7 (patch) | |
tree | 299b6ceb79afc7f5b769b858cb6476b57fd2b11f /jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket | |
parent | 2a25402de0a12ca41d85dc95fa365dbd70a4a086 (diff) | |
download | org.eclipse.jetty.project-9b7b54ea0b7eae2dc31986963874b4ae3fbbdba7.tar.gz org.eclipse.jetty.project-9b7b54ea0b7eae2dc31986963874b4ae3fbbdba7.tar.xz org.eclipse.jetty.project-9b7b54ea0b7eae2dc31986963874b4ae3fbbdba7.zip |
444517 - Ensure WebSocketUpgradeFilter is always first in filter chain
* Using Servlet 3.1's ServletContext.addFilter() mechanisms with its
FilterRegistration to encourage the WebSocketUpgradeFilter to be
first in the filter chain.
Note: this is possible, but can be overridden by another call
to the same ServletContext.addFilter() using the same techniques
to put something in front of the WebSocketUpgradeFilter.
Diffstat (limited to 'jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket')
-rw-r--r-- | jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketUpgradeFilter.java | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketUpgradeFilter.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketUpgradeFilter.java index b2a9deb092..374b072607 100644 --- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketUpgradeFilter.java +++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketUpgradeFilter.java @@ -20,10 +20,13 @@ package org.eclipse.jetty.websocket.server; import java.io.IOException; import java.util.EnumSet; + import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.FilterRegistration; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -58,16 +61,48 @@ public class WebSocketUpgradeFilter extends ContainerLifeCycle implements Filter public static WebSocketUpgradeFilter configureContext(ServletContextHandler context) { WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER); - WebSocketUpgradeFilter filter = new WebSocketUpgradeFilter(policy); + + String name = "Jetty_WebSocketUpgradeFilter"; + String pathSpec = "/*"; + EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(DispatcherType.REQUEST); + FilterHolder fholder = new FilterHolder(filter); - fholder.setName("Jetty_WebSocketUpgradeFilter"); - fholder.setDisplayName("WebSocket Upgrade Filter"); + fholder.setName(name); + context.addFilter(fholder,pathSpec,dispatcherTypes); + + if (LOG.isDebugEnabled()) + { + LOG.debug("Adding [{}] {} mapped to {} to {}",name,filter,pathSpec,context); + } + + // Store reference to the WebSocketUpgradeFilter + context.setAttribute(WebSocketUpgradeFilter.class.getName(),filter); + + return filter; + } + + public static WebSocketUpgradeFilter configureContext(ServletContext context) + { + WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER); + WebSocketUpgradeFilter filter = new WebSocketUpgradeFilter(policy); + + String name = "Jetty_Dynamic_WebSocketUpgradeFilter"; String pathSpec = "/*"; - context.addFilter(fholder,pathSpec,EnumSet.of(DispatcherType.REQUEST)); + EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(DispatcherType.REQUEST); + boolean isMatchAfter = false; + String urlPatterns[] = + { + pathSpec + }; + + FilterRegistration.Dynamic dyn = context.addFilter(name,filter); + dyn.addMappingForUrlPatterns(dispatcherTypes,isMatchAfter,urlPatterns); if (LOG.isDebugEnabled()) - LOG.debug("Adding {} mapped to {} to {}",filter,pathSpec,context); + { + LOG.debug("Adding [{}] {} mapped to {} to {}",name,filter,pathSpec,context); + } // Store reference to the WebSocketUpgradeFilter context.setAttribute(WebSocketUpgradeFilter.class.getName(),filter); |