spring-framework / org.springframework.web.socket.sockjs.support / AbstractSockJsService

AbstractSockJsService

abstract class AbstractSockJsService : SockJsService, CorsConfigurationSource

An abstract base class for SockJsService implementations that provides SockJS path resolution and handling of static SockJS requests (e.g. "/info", "/iframe.html", etc). Sub-classes must handle session URLs (i.e. transport-specific requests). By default, only same origin requests are allowed. Use #setAllowedOrigins to specify a list of allowed origins (a list containing "*" will allow all origins).

Author
Rossen Stoyanchev

Author
Sebastien Deleuze

Since
4.0

Constructors

<init>

AbstractSockJsService(scheduler: TaskScheduler)

Functions

getAllowedOrigins

open fun getAllowedOrigins(): MutableCollection<String>

getCorsConfiguration

open fun getCorsConfiguration(request: HttpServletRequest): CorsConfiguration

getDisconnectDelay

open fun getDisconnectDelay(): Long

Return the amount of time in milliseconds before a client is considered disconnected.

getHeartbeatTime

open fun getHeartbeatTime(): Long

Return the amount of time in milliseconds when the server has not sent any messages.

getHttpMessageCacheSize

open fun getHttpMessageCacheSize(): Int

Return the size of the HTTP message cache.

getName

open fun getName(): String

Return the unique name associated with this service.

getSockJsClientLibraryUrl

open fun getSockJsClientLibraryUrl(): String

Return he URL to the SockJS JavaScript client library.

getStreamBytesLimit

open fun getStreamBytesLimit(): Int

Return the minimum number of bytes that can be sent over a single HTTP streaming request before it will be closed.

getTaskScheduler

open fun getTaskScheduler(): TaskScheduler

A scheduler instance to use for scheduling heart-beat messages.

handleRequest

fun handleRequest(request: ServerHttpRequest, response: ServerHttpResponse, sockJsPath: String, wsHandler: WebSocketHandler): Unit

This method determines the SockJS path and handles SockJS static URLs. Session URLs and raw WebSocket requests are delegated to abstract methods.

isSessionCookieNeeded

open fun isSessionCookieNeeded(): Boolean

Return whether the JSESSIONID cookie is required for the application to function.

isWebSocketEnabled

open fun isWebSocketEnabled(): Boolean

Return whether WebSocket transport is enabled.

setAllowedOrigins

open fun setAllowedOrigins(allowedOrigins: MutableCollection<String>): Unit

Configure allowed Origin header values. This check is mostly designed for browsers. There is nothing preventing other types of client to modify the Origin header value.

When SockJS is enabled and origins are restricted, transport types that do not allow to check request origin (JSONP and Iframe based transports) are disabled. As a consequence, IE 6 to 9 are not supported when origins are restricted.

Each provided allowed origin must have a scheme, and optionally a port (e.g. "http://example.org", "http://example.org:9090"). An allowed origin string may also be "*" in which case all origins are allowed.

setDisconnectDelay

open fun setDisconnectDelay(disconnectDelay: Long): Unit

The amount of time in milliseconds before a client is considered disconnected after not having a receiving connection, i.e. an active connection over which the server can send data to the client.

The default value is 5000.

setHeartbeatTime

open fun setHeartbeatTime(heartbeatTime: Long): Unit

Specify the amount of time in milliseconds when the server has not sent any messages and after which the server should send a heartbeat frame to the client in order to keep the connection from breaking.

The default value is 25,000 (25 seconds).

setHttpMessageCacheSize

open fun setHttpMessageCacheSize(httpMessageCacheSize: Int): Unit

The number of server-to-client messages that a session can cache while waiting for the next HTTP polling request from the client. All HTTP transports use this property since even streaming transports recycle HTTP requests periodically.

The amount of time between HTTP requests should be relatively brief and will not exceed the allows disconnect delay (see #setDisconnectDelay(long)); 5 seconds by default.

The default size is 100.

setName

open fun setName(name: String): Unit

Set a unique name for this service (mainly for logging purposes).

setSessionCookieNeeded

open fun setSessionCookieNeeded(sessionCookieNeeded: Boolean): Unit

The SockJS protocol requires a server to respond to an initial "/info" request from clients with a "cookie_needed" boolean property that indicates whether the use of a JSESSIONID cookie is required for the application to function correctly, e.g. for load balancing or in Java Servlet containers for the use of an HTTP session.

This is especially important for IE 8,9 that support XDomainRequest -- a modified AJAX/XHR -- that can do requests across domains but does not send any cookies. In those cases, the SockJS client prefers the "iframe-htmlfile" transport over "xdr-streaming" in order to be able to send cookies.

The SockJS protocol also expects a SockJS service to echo back the JSESSIONID cookie when this property is set to true. However, when running in a Servlet container this is not necessary since the container takes care of it.

The default value is "true" to maximize the chance for applications to work correctly in IE 8,9 with support for cookies (and the JSESSIONID cookie in particular). However, an application can choose to set this to "false" if the use of cookies (and HTTP session) is not required.

setSockJsClientLibraryUrl

open fun setSockJsClientLibraryUrl(clientLibraryUrl: String): Unit

Transports with no native cross-domain communication (e.g. "eventsource", "htmlfile") must get a simple page from the "foreign" domain in an invisible iframe so that code in the iframe can run from a domain local to the SockJS server. Since the iframe needs to load the SockJS javascript client library, this property allows specifying where to load it from.

By default this is set to point to "https://cdn.jsdelivr.net/sockjs/1.0.0/sockjs.min.js". However, it can also be set to point to a URL served by the application.

Note that it's possible to specify a relative URL in which case the URL must be relative to the iframe URL. For example assuming a SockJS endpoint mapped to "/sockjs", and resulting iframe URL "/sockjs/iframe.html", then the the relative URL must start with "../../" to traverse up to the location above the SockJS mapping. In case of a prefix-based Servlet mapping one more traversal may be needed.

setStreamBytesLimit

open fun setStreamBytesLimit(streamBytesLimit: Int): Unit

Streaming transports save responses on the client side and don't free memory used by delivered messages. Such transports need to recycle the connection once in a while. This property sets a minimum number of bytes that can be sent over a single HTTP streaming request before it will be closed. After that client will open a new request. Setting this value to one effectively disables streaming and will make streaming transports to behave like polling transports.

The default value is 128K (i.e. 128 * 1024).

setSuppressCors

open fun setSuppressCors(suppressCors: Boolean): Unit

This option can be used to disable automatic addition of CORS headers for SockJS requests.

The default value is "false".

setWebSocketEnabled

open fun setWebSocketEnabled(webSocketEnabled: Boolean): Unit

Some load balancers do not support WebSocket. This option can be used to disable the WebSocket transport on the server side.

The default value is "true".

shouldSuppressCors

open fun shouldSuppressCors(): Boolean