Add missing HandshakeInterceptor for STOMP endpoints

Issue: SPR-11845
This commit is contained in:
Rossen Stoyanchev
2014-07-15 13:28:50 -04:00
parent 6d6cc0ecec
commit 4dd5c274a0
3 changed files with 48 additions and 11 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.web.socket.config.annotation;
import org.springframework.web.socket.server.HandshakeHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
/**
* A contract for configuring a STOMP over WebSocket endpoint.
@@ -36,4 +37,9 @@ public interface StompWebSocketEndpointRegistration {
*/
StompWebSocketEndpointRegistration setHandshakeHandler(HandshakeHandler handshakeHandler);
/**
* Configure the HandshakeInterceptor's to use.
*/
StompWebSocketEndpointRegistration addInterceptors(HandshakeInterceptor... interceptors);
}

View File

@@ -23,11 +23,14 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
import org.springframework.web.socket.server.support.WebSocketHttpRequestHandler;
import org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler;
import org.springframework.web.socket.sockjs.SockJsService;
import org.springframework.web.socket.sockjs.transport.handler.WebSocketTransportHandler;
import java.util.Arrays;
/**
* An abstract base class class for configuring STOMP over WebSocket/SockJS endpoints.
*
@@ -44,6 +47,8 @@ public class WebMvcStompWebSocketEndpointRegistration implements StompWebSocketE
private HandshakeHandler handshakeHandler;
private HandshakeInterceptor[] interceptors;
private StompSockJsServiceRegistration registration;
@@ -58,9 +63,6 @@ public class WebMvcStompWebSocketEndpointRegistration implements StompWebSocketE
this.sockJsTaskScheduler = sockJsTaskScheduler;
}
/**
* Provide a custom or pre-configured {@link HandshakeHandler}.
*/
@Override
public StompWebSocketEndpointRegistration setHandshakeHandler(HandshakeHandler handshakeHandler) {
Assert.notNull(handshakeHandler, "'handshakeHandler' must not be null");
@@ -68,12 +70,22 @@ public class WebMvcStompWebSocketEndpointRegistration implements StompWebSocketE
return this;
}
/**
* Enable SockJS fallback options.
*/
@Override
public StompWebSocketEndpointRegistration addInterceptors(HandshakeInterceptor... interceptors) {
this.interceptors = interceptors;
return this;
}
protected HandshakeInterceptor[] getInterceptors() {
return this.interceptors;
}
@Override
public SockJsServiceRegistration withSockJS() {
this.registration = new StompSockJsServiceRegistration(this.sockJsTaskScheduler);
if (this.interceptors != null) {
this.registration.setInterceptors(this.interceptors);
}
if (this.handshakeHandler != null) {
WebSocketTransportHandler transportHandler = new WebSocketTransportHandler(this.handshakeHandler);
this.registration.setTransportHandlerOverrides(transportHandler);
@@ -93,9 +105,16 @@ public class WebMvcStompWebSocketEndpointRegistration implements StompWebSocketE
}
else {
for (String path : this.paths) {
WebSocketHttpRequestHandler handler = (this.handshakeHandler != null) ?
new WebSocketHttpRequestHandler(this.webSocketHandler, this.handshakeHandler) :
new WebSocketHttpRequestHandler(this.webSocketHandler);
WebSocketHttpRequestHandler handler;
if (this.handshakeHandler != null) {
handler = new WebSocketHttpRequestHandler(this.webSocketHandler, this.handshakeHandler);
}
else {
handler = new WebSocketHttpRequestHandler(this.webSocketHandler);
}
if (this.interceptors != null) {
handler.setHandshakeInterceptors(Arrays.asList(this.interceptors));
}
mappings.add(handler, path);
}
}