public class WebSocketTransportHandler extends AbstractTransportHandler implements SockJsSessionFactory, HandshakeHandler, Lifecycle, ServletContextAware
TransportHandler
. Uses SockJsWebSocketHandler
and
WebSocketServerSockJsSession
to add SockJS processing.
Also implements HandshakeHandler
to support raw WebSocket communication at
SockJS URL "/websocket".
logger
Constructor and Description |
---|
WebSocketTransportHandler(HandshakeHandler handshakeHandler) |
Modifier and Type | Method and Description |
---|---|
boolean |
checkSessionType(SockJsSession session)
Check whether the type of the given session matches the transport type
of this
TransportHandler where session id and the transport type
are extracted from the SockJS URL. |
AbstractSockJsSession |
createSession(String id,
WebSocketHandler handler,
Map<String,Object> attrs)
Create a new SockJS session.
|
boolean |
doHandshake(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler handler,
Map<String,Object> attributes)
Initiate the handshake.
|
HandshakeHandler |
getHandshakeHandler() |
TransportType |
getTransportType()
Return the transport type supported by this handler.
|
void |
handleRequest(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler wsHandler,
SockJsSession wsSession)
Handle the given request and delegate messages to the provided
WebSocketHandler . |
boolean |
isRunning()
Check whether this component is currently running.
|
void |
setServletContext(ServletContext servletContext)
Set the
ServletContext that this object runs in. |
void |
start()
Start this component.
|
void |
stop()
Stop this component, typically in a synchronous fashion, such that the component is
fully stopped upon return of this method.
|
getServiceConfig, initialize
public WebSocketTransportHandler(HandshakeHandler handshakeHandler)
public TransportType getTransportType()
TransportHandler
getTransportType
in interface TransportHandler
public HandshakeHandler getHandshakeHandler()
public void setServletContext(ServletContext servletContext)
ServletContextAware
ServletContext
that this object runs in.
Invoked after population of normal bean properties but before an init
callback like InitializingBean's afterPropertiesSet
or a
custom init-method. Invoked after ApplicationContextAware's
setApplicationContext
.
setServletContext
in interface ServletContextAware
servletContext
- the ServletContext object to be used by this objectInitializingBean.afterPropertiesSet()
,
ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)
public void start()
Lifecycle
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.
start
in interface Lifecycle
SmartLifecycle.isAutoStartup()
public void stop()
Lifecycle
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.
stop
in interface Lifecycle
SmartLifecycle.stop(Runnable)
,
DisposableBean.destroy()
public boolean isRunning()
Lifecycle
In the case of a container, this will return true
only if all
components that apply are currently running.
public boolean checkSessionType(SockJsSession session)
TransportHandler
TransportHandler
where session id and the transport type
are extracted from the SockJS URL.checkSessionType
in interface TransportHandler
true
if the session matches (and would therefore get
accepted by TransportHandler.handleRequest(org.springframework.http.server.ServerHttpRequest, org.springframework.http.server.ServerHttpResponse, org.springframework.web.socket.WebSocketHandler, org.springframework.web.socket.sockjs.transport.SockJsSession)
), or false
otherwisepublic AbstractSockJsSession createSession(String id, WebSocketHandler handler, Map<String,Object> attrs)
SockJsSessionFactory
createSession
in interface SockJsSessionFactory
id
- the ID of the sessionhandler
- the underlying WebSocketHandler
attrs
- handshake request specific attributesnull
public void handleRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, SockJsSession wsSession) throws SockJsException
TransportHandler
WebSocketHandler
.handleRequest
in interface TransportHandler
request
- the current requestresponse
- the current responsewsHandler
- the target WebSocketHandler (never null
)wsSession
- the SockJS session (never null
)SockJsException
- raised when request processing fails as
explained in SockJsService
public boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler, Map<String,Object> attributes) throws HandshakeFailureException
HandshakeHandler
doHandshake
in interface HandshakeHandler
request
- the current requestresponse
- the current responsehandler
- the handler to process WebSocket messages; see
PerConnectionWebSocketHandler
for providing a handler with
per-connection lifecycle.attributes
- attributes from the HTTP handshake to associate with the WebSocket
session; the provided attributes are copied, the original map is not used.HandshakeFailureException
- thrown when handshake processing failed to
complete due to an internal, unrecoverable error, i.e. a server error as
opposed to a failure to successfully negotiate the handshake.