|
|
@ -48,8 +48,8 @@ import org.springframework.web.socket.server.HandshakeFailureException; |
|
|
|
import org.springframework.web.socket.server.RequestUpgradeStrategy; |
|
|
|
import org.springframework.web.socket.server.RequestUpgradeStrategy; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* A base class for {@link RequestUpgradeStrategy} implementations that build on the |
|
|
|
* A base class for {@link RequestUpgradeStrategy} implementations that build |
|
|
|
* standard WebSocket API for Java. |
|
|
|
* on the standard WebSocket API for Java (JSR-356). |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
* @since 4.0 |
|
|
|
* @since 4.0 |
|
|
@ -61,15 +61,6 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS |
|
|
|
private volatile List<WebSocketExtension> extensions; |
|
|
|
private volatile List<WebSocketExtension> extensions; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public List<WebSocketExtension> getSupportedExtensions(ServerHttpRequest request) { |
|
|
|
|
|
|
|
if(this.extensions == null) { |
|
|
|
|
|
|
|
HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); |
|
|
|
|
|
|
|
this.extensions = getInstalledExtensions(getContainer(servletRequest)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return this.extensions; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected ServerContainer getContainer(HttpServletRequest request) { |
|
|
|
protected ServerContainer getContainer(HttpServletRequest request) { |
|
|
|
ServletContext servletContext = request.getServletContext(); |
|
|
|
ServletContext servletContext = request.getServletContext(); |
|
|
|
String attrName = "javax.websocket.server.ServerContainer"; |
|
|
|
String attrName = "javax.websocket.server.ServerContainer"; |
|
|
@ -79,12 +70,9 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS |
|
|
|
return container; |
|
|
|
return container; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected List<WebSocketExtension> getInstalledExtensions(WebSocketContainer container) { |
|
|
|
protected final HttpServletRequest getHttpServletRequest(ServerHttpRequest request) { |
|
|
|
List<WebSocketExtension> result = new ArrayList<WebSocketExtension>(); |
|
|
|
Assert.isTrue(request instanceof ServletServerHttpRequest); |
|
|
|
for (Extension ext : container.getInstalledExtensions()) { |
|
|
|
return ((ServletServerHttpRequest) request).getServletRequest(); |
|
|
|
result.add(new StandardToWebSocketExtensionAdapter(ext)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected final HttpServletResponse getHttpServletResponse(ServerHttpResponse response) { |
|
|
|
protected final HttpServletResponse getHttpServletResponse(ServerHttpResponse response) { |
|
|
@ -92,18 +80,31 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS |
|
|
|
return ((ServletServerHttpResponse) response).getServletResponse(); |
|
|
|
return ((ServletServerHttpResponse) response).getServletResponse(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected final HttpServletRequest getHttpServletRequest(ServerHttpRequest request) { |
|
|
|
|
|
|
|
Assert.isTrue(request instanceof ServletServerHttpRequest); |
|
|
|
@Override |
|
|
|
return ((ServletServerHttpRequest) request).getServletRequest(); |
|
|
|
public List<WebSocketExtension> getSupportedExtensions(ServerHttpRequest request) { |
|
|
|
|
|
|
|
if (this.extensions == null) { |
|
|
|
|
|
|
|
HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); |
|
|
|
|
|
|
|
this.extensions = getInstalledExtensions(getContainer(servletRequest)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return this.extensions; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected List<WebSocketExtension> getInstalledExtensions(WebSocketContainer container) { |
|
|
|
|
|
|
|
List<WebSocketExtension> result = new ArrayList<WebSocketExtension>(); |
|
|
|
|
|
|
|
for (Extension ext : container.getInstalledExtensions()) { |
|
|
|
|
|
|
|
result.add(new StandardToWebSocketExtensionAdapter(ext)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void upgrade(ServerHttpRequest request, ServerHttpResponse response, |
|
|
|
public void upgrade(ServerHttpRequest request, ServerHttpResponse response, |
|
|
|
String selectedProtocol, List<WebSocketExtension> selectedExtensions, Principal user, |
|
|
|
String selectedProtocol, List<WebSocketExtension> selectedExtensions, Principal user, |
|
|
|
WebSocketHandler wsHandler, Map<String, Object> attrs) throws HandshakeFailureException { |
|
|
|
WebSocketHandler wsHandler, Map<String, Object> attrs) throws HandshakeFailureException { |
|
|
|
|
|
|
|
|
|
|
|
HttpHeaders headers = request.getHeaders(); |
|
|
|
HttpHeaders headers = request.getHeaders(); |
|
|
|
|
|
|
|
|
|
|
|
InetSocketAddress localAddr = request.getLocalAddress(); |
|
|
|
InetSocketAddress localAddr = request.getLocalAddress(); |
|
|
|
InetSocketAddress remoteAddr = request.getRemoteAddress(); |
|
|
|
InetSocketAddress remoteAddr = request.getRemoteAddress(); |
|
|
|
|
|
|
|
|
|
|
|