WebSocketHandler handler, String sessionId, String transport) throws SockJsException { TransportType transportType = TransportType.fromValue(transport); if (transportType == null) { if (logger.isWarnEnabled()) { HttpMethod supportedMethod = transportType.getHttpMethod(); if (supportedMethod != request.getMethod()) { if (request.getMethod() == HttpMethod.OPTIONS && transportType.supportsCors()) { if (checkOrigin(request, response, HttpMethod.OPTIONS, supportedMethod)) { response.setStatusCode(HttpStatus.NO_CONTENT); else if (transportType.supportsCors()) { sendMethodNotAllowed(response, supportedMethod, HttpMethod.OPTIONS); if (transportType.sendsNoCacheInstruction()) { addNoCacheHeaders(response); if (transportType.supportsCors() && !checkOrigin(request, response)) { return;
private void testTransportUrl(String scheme, String expectedScheme, TransportType transportType) throws Exception { SockJsUrlInfo info = new SockJsUrlInfo(new URI(scheme + "://example.com")); String serverId = info.getServerId(); String sessionId = info.getSessionId(); String transport = transportType.toString().toLowerCase(); URI expected = new URI(expectedScheme + "://example.com/" + serverId + "/" + sessionId + "/" + transport); assertThat(info.getTransportUrl(transportType), equalTo(expected)); }
private String getScheme(TransportType transportType) { String scheme = this.sockJsUrl.getScheme(); if (TransportType.WEBSOCKET.equals(transportType)) { if (!scheme.startsWith("ws")) { scheme = ("https".equals(scheme) ? "wss" : "ws"); } } else { if (!scheme.startsWith("http")) { scheme = ("wss".equals(scheme) ? "https" : "http"); } } return scheme; }
@Override protected boolean validateRequest(String serverId, String sessionId, String transport) { if (!super.validateRequest(serverId, sessionId, transport)) { return false; } if (!this.allowedOrigins.contains("*")) { TransportType transportType = TransportType.fromValue(transport); if (transportType == null || !transportType.supportsOrigin()) { if (logger.isWarnEnabled()) { logger.warn("Origin check enabled but transport '" + transport + "' does not support it."); } return false; } } return true; }
@Test public void testFromValue() { assertEquals(TransportType.WEBSOCKET, TransportType.fromValue("websocket")); assertEquals(TransportType.XHR, TransportType.fromValue("xhr")); assertEquals(TransportType.XHR_SEND, TransportType.fromValue("xhr_send")); assertEquals(TransportType.XHR_STREAMING, TransportType.fromValue("xhr_streaming")); assertEquals(TransportType.EVENT_SOURCE, TransportType.fromValue("eventsource")); assertEquals(TransportType.HTML_FILE, TransportType.fromValue("htmlfile")); }
@Override protected boolean validateRequest(String serverId, String sessionId, String transport) { if (!super.validateRequest(serverId, sessionId, transport)) { return false; } if (!this.allowedOrigins.contains("*")) { TransportType transportType = TransportType.fromValue(transport); if (transportType == null || !transportType.supportsOrigin()) { if (logger.isWarnEnabled()) { logger.warn("Origin check enabled but transport '" + transport + "' does not support it."); } return false; } } return true; }
WebSocketHandler handler, String sessionId, String transport) throws SockJsException { TransportType transportType = TransportType.fromValue(transport); if (transportType == null) { if (logger.isWarnEnabled()) { HttpMethod supportedMethod = transportType.getHttpMethod(); if (supportedMethod != request.getMethod()) { if (request.getMethod() == HttpMethod.OPTIONS && transportType.supportsCors()) { if (checkOrigin(request, response, HttpMethod.OPTIONS, supportedMethod)) { response.setStatusCode(HttpStatus.NO_CONTENT); else if (transportType.supportsCors()) { sendMethodNotAllowed(response, supportedMethod, HttpMethod.OPTIONS); if (transportType.sendsNoCacheInstruction()) { addNoCacheHeaders(response); if (transportType.supportsCors() && !checkOrigin(request, response)) { return;
@Override protected boolean validateRequest(String serverId, String sessionId, String transport) { if (!super.validateRequest(serverId, sessionId, transport)) { return false; } if (!this.allowedOrigins.contains("*")) { TransportType transportType = TransportType.fromValue(transport); if (transportType == null || !transportType.supportsOrigin()) { if (logger.isWarnEnabled()) { logger.warn("Origin check enabled but transport '" + transport + "' does not support it."); } return false; } } return true; }
public URI getTransportUrl(TransportType transportType) { return UriComponentsBuilder.fromUri(this.sockJsUrl) .scheme(getScheme(transportType)) .pathSegment(getServerId()) .pathSegment(getSessionId()) .pathSegment(transportType.toString()) .build(true).toUri(); }
private DefaultTransportRequest createRequest( SockJsUrlInfo urlInfo, @Nullable HttpHeaders headers, ServerInfo serverInfo) { List<DefaultTransportRequest> requests = new ArrayList<>(this.transports.size()); for (Transport transport : this.transports) { for (TransportType type : transport.getTransportTypes()) { if (serverInfo.isWebSocketEnabled() || !TransportType.WEBSOCKET.equals(type)) { requests.add(new DefaultTransportRequest(urlInfo, headers, getHttpRequestHeaders(headers), transport, type, getMessageCodec())); } } } if (CollectionUtils.isEmpty(requests)) { throw new IllegalStateException( "No transports: " + urlInfo + ", webSocketEnabled=" + serverInfo.isWebSocketEnabled()); } for (int i = 0; i < requests.size() - 1; i++) { DefaultTransportRequest request = requests.get(i); Principal user = getUser(); if (user != null) { request.setUser(user); } if (this.connectTimeoutScheduler != null) { request.setTimeoutValue(serverInfo.getRetransmissionTimeout()); request.setTimeoutScheduler(this.connectTimeoutScheduler); } request.setFallbackRequest(requests.get(i + 1)); } return requests.get(0); }
WebSocketHandler handler, String sessionId, String transport) throws SockJsException { TransportType transportType = TransportType.fromValue(transport); if (transportType == null) { if (logger.isWarnEnabled()) { HttpMethod supportedMethod = transportType.getHttpMethod(); if (supportedMethod != request.getMethod()) { if (request.getMethod() == HttpMethod.OPTIONS && transportType.supportsCors()) { if (checkOrigin(request, response, HttpMethod.OPTIONS, supportedMethod)) { response.setStatusCode(HttpStatus.NO_CONTENT); else if (transportType.supportsCors()) { sendMethodNotAllowed(response, supportedMethod, HttpMethod.OPTIONS); if (transportType.sendsNoCacheInstruction()) { addNoCacheHeaders(response); if (transportType.supportsCors() && !checkOrigin(request, response)) { return;
public URI getTransportUrl(TransportType transportType) { return UriComponentsBuilder.fromUri(this.sockJsUrl) .scheme(getScheme(transportType)) .pathSegment(getServerId()) .pathSegment(getSessionId()) .pathSegment(transportType.toString()) .build(true).toUri(); }
private String getScheme(TransportType transportType) { String scheme = this.sockJsUrl.getScheme(); if (TransportType.WEBSOCKET.equals(transportType)) { if (!scheme.startsWith("ws")) { scheme = ("https".equals(scheme) ? "wss" : "ws"); } } else { if (!scheme.startsWith("http")) { scheme = ("wss".equals(scheme) ? "https" : "http"); } } return scheme; }
public URI getTransportUrl(TransportType transportType) { return UriComponentsBuilder.fromUri(this.sockJsUrl) .scheme(getScheme(transportType)) .pathSegment(getServerId()) .pathSegment(getSessionId()) .pathSegment(transportType.toString()) .build(true).toUri(); }
private String getScheme(TransportType transportType) { String scheme = this.sockJsUrl.getScheme(); if (TransportType.WEBSOCKET.equals(transportType)) { if (!scheme.startsWith("ws")) { scheme = ("https".equals(scheme) ? "wss" : "ws"); } } else { if (!scheme.startsWith("http")) { scheme = ("wss".equals(scheme) ? "https" : "http"); } } return scheme; }
private DefaultTransportRequest createRequest( SockJsUrlInfo urlInfo, @Nullable HttpHeaders headers, ServerInfo serverInfo) { List<DefaultTransportRequest> requests = new ArrayList<>(this.transports.size()); for (Transport transport : this.transports) { for (TransportType type : transport.getTransportTypes()) { if (serverInfo.isWebSocketEnabled() || !TransportType.WEBSOCKET.equals(type)) { requests.add(new DefaultTransportRequest(urlInfo, headers, getHttpRequestHeaders(headers), transport, type, getMessageCodec())); } } } if (CollectionUtils.isEmpty(requests)) { throw new IllegalStateException( "No transports: " + urlInfo + ", webSocketEnabled=" + serverInfo.isWebSocketEnabled()); } for (int i = 0; i < requests.size() - 1; i++) { DefaultTransportRequest request = requests.get(i); Principal user = getUser(); if (user != null) { request.setUser(user); } if (this.connectTimeoutScheduler != null) { request.setTimeoutValue(serverInfo.getRetransmissionTimeout()); request.setTimeoutScheduler(this.connectTimeoutScheduler); } request.setFallbackRequest(requests.get(i + 1)); } return requests.get(0); }
private DefaultTransportRequest createRequest( SockJsUrlInfo urlInfo, @Nullable HttpHeaders headers, ServerInfo serverInfo) { List<DefaultTransportRequest> requests = new ArrayList<>(this.transports.size()); for (Transport transport : this.transports) { for (TransportType type : transport.getTransportTypes()) { if (serverInfo.isWebSocketEnabled() || !TransportType.WEBSOCKET.equals(type)) { requests.add(new DefaultTransportRequest(urlInfo, headers, getHttpRequestHeaders(headers), transport, type, getMessageCodec())); } } } if (CollectionUtils.isEmpty(requests)) { throw new IllegalStateException( "No transports: " + urlInfo + ", webSocketEnabled=" + serverInfo.isWebSocketEnabled()); } for (int i = 0; i < requests.size() - 1; i++) { DefaultTransportRequest request = requests.get(i); Principal user = getUser(); if (user != null) { request.setUser(user); } if (this.connectTimeoutScheduler != null) { request.setTimeoutValue(serverInfo.getRetransmissionTimeout()); request.setTimeoutScheduler(this.connectTimeoutScheduler); } request.setFallbackRequest(requests.get(i + 1)); } return requests.get(0); }