Class TransportHandlingSockJsService

java.lang.Object
org.springframework.web.socket.sockjs.support.AbstractSockJsService
org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService
All Implemented Interfaces:
Lifecycle, CorsConfigurationSource, SockJsService, SockJsServiceConfig
Direct Known Subclasses:
DefaultSockJsService

public class TransportHandlingSockJsService extends AbstractSockJsService implements SockJsServiceConfig, Lifecycle
A basic implementation of SockJsService with support for SPI-based transport handling and session management.

Based on the TransportHandler SPI. TransportHandlers may additionally implement the SockJsSessionFactory and HandshakeHandler interfaces.

See the AbstractSockJsService base class for important details on request mapping.

Since:
4.0
Author:
Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze
  • Constructor Details

    • TransportHandlingSockJsService

      public TransportHandlingSockJsService(TaskScheduler scheduler, TransportHandler... handlers)
      Create a TransportHandlingSockJsService with given handler types.
      Parameters:
      scheduler - a task scheduler for heart-beat messages and removing timed-out sessions; the provided TaskScheduler should be declared as a Spring bean to ensure it gets initialized at start-up and shuts down when the application stops
      handlers - one or more TransportHandler implementations to use
    • TransportHandlingSockJsService

      public TransportHandlingSockJsService(TaskScheduler scheduler, Collection<TransportHandler> handlers)
      Create a TransportHandlingSockJsService with given handler types.
      Parameters:
      scheduler - a task scheduler for heart-beat messages and removing timed-out sessions; the provided TaskScheduler should be declared as a Spring bean to ensure it gets initialized at start-up and shuts down when the application stops
      handlers - one or more TransportHandler implementations to use
  • Method Details

    • getTransportHandlers

      public Map<TransportType,TransportHandler> getTransportHandlers()
      Return the registered handlers per transport type.
    • setMessageCodec

      public void setMessageCodec(SockJsMessageCodec messageCodec)
      The codec to use for encoding and decoding SockJS messages.
    • getMessageCodec

      public SockJsMessageCodec getMessageCodec()
      Description copied from interface: SockJsServiceConfig
      The codec to use for encoding and decoding SockJS messages.
      Specified by:
      getMessageCodec in interface SockJsServiceConfig
    • setHandshakeInterceptors

      public void setHandshakeInterceptors(@Nullable List<HandshakeInterceptor> interceptors)
      Configure one or more WebSocket handshake request interceptors.
    • getHandshakeInterceptors

      public List<HandshakeInterceptor> getHandshakeInterceptors()
      Return the configured WebSocket handshake request interceptors.
    • start

      public void start()
      Description copied from interface: Lifecycle
      Start this component.

      Should not throw an exception if the component is already running.

      In the case of a container, this will propagate the start signal to all components that apply.

      Specified by:
      start in interface Lifecycle
      See Also:
    • stop

      public void stop()
      Description copied from interface: Lifecycle
      Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method. Consider implementing SmartLifecycle and its stop(Runnable) variant when asynchronous stop behavior is necessary.

      Note that this stop notification is not guaranteed to come before destruction: On regular shutdown, Lifecycle beans will first receive a stop notification before the general destruction callbacks are being propagated; however, on hot refresh during a context's lifetime or on aborted refresh attempts, a given bean's destroy method will be called without any consideration of stop signals upfront.

      Should not throw an exception if the component is not running (not started yet).

      In the case of a container, this will propagate the stop signal to all components that apply.

      Specified by:
      stop in interface Lifecycle
      See Also:
    • isRunning

      public boolean isRunning()
      Description copied from interface: Lifecycle
      Check whether this component is currently running.

      In the case of a container, this will return true only if all components that apply are currently running.

      Specified by:
      isRunning in interface Lifecycle
      Returns:
      whether the component is currently running
    • handleRawWebSocketRequest

      protected void handleRawWebSocketRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler) throws IOException
      Description copied from class: AbstractSockJsService
      Handle request for raw WebSocket communication, i.e. without any SockJS message framing.
      Specified by:
      handleRawWebSocketRequest in class AbstractSockJsService
      Throws:
      IOException
    • handleTransportRequest

      protected void handleTransportRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler, String sessionId, String transport) throws SockJsException
      Description copied from class: AbstractSockJsService
      Handle a SockJS session URL (i.e. transport-specific request).
      Specified by:
      handleTransportRequest in class AbstractSockJsService
      Throws:
      SockJsException
    • validateRequest

      protected boolean validateRequest(String serverId, String sessionId, String transport)
      Overrides:
      validateRequest in class AbstractSockJsService