public class StompSubProtocolHandler extends java.lang.Object implements SubProtocolHandler, ApplicationEventPublisherAware
SubProtocolHandler
for STOMP that supports versions 1.0, 1.1, and 1.2
of the STOMP specification.Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CONNECTED_USER_HEADER
The name of the header set on the CONNECTED frame indicating the name
of the user authenticated on the WebSocket session.
|
private java.util.Map<java.lang.String,BufferingStompDecoder> |
decoders |
private ApplicationEventPublisher |
eventPublisher |
private static Log |
logger |
private int |
messageSizeLimit |
static int |
MINIMUM_WEBSOCKET_MESSAGE_SIZE
This handler supports assembling large STOMP messages split into multiple
WebSocket messages and STOMP clients (like stomp.js) indeed split large STOMP
messages at 16K boundaries.
|
private StompEncoder |
stompEncoder |
private UserSessionRegistry |
userSessionRegistry |
Constructor and Description |
---|
StompSubProtocolHandler() |
Modifier and Type | Method and Description |
---|---|
void |
afterSessionEnded(WebSocketSession session,
CloseStatus closeStatus,
MessageChannel outputChannel)
Invoked after a
WebSocketSession has ended. |
void |
afterSessionStarted(WebSocketSession session,
MessageChannel outputChannel)
Invoked after a
WebSocketSession has started. |
private void |
afterStompSessionConnected(StompHeaderAccessor headers,
WebSocketSession session) |
int |
getMessageSizeLimit()
Get the configured message buffer size limit in bytes.
|
java.util.List<java.lang.String> |
getSupportedProtocols()
Return the list of sub-protocols supported by this handler, never
null . |
UserSessionRegistry |
getUserSessionRegistry() |
private java.lang.String |
getVersion(StompHeaderAccessor connectAckHeaders) |
void |
handleMessageFromClient(WebSocketSession session,
WebSocketMessage<?> webSocketMessage,
MessageChannel outputChannel)
Handle incoming WebSocket messages from clients.
|
void |
handleMessageToClient(WebSocketSession session,
Message<?> message)
Handle STOMP messages going back out to WebSocket clients.
|
private void |
publishEvent(ApplicationEvent event) |
private java.lang.String |
resolveNameForUserSessionRegistry(java.security.Principal principal) |
java.lang.String |
resolveSessionId(Message<?> message)
Resolve the session id from the given message or return
null . |
protected void |
sendErrorMessage(WebSocketSession session,
java.lang.Throwable error) |
void |
setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
Set the ApplicationEventPublisher that this object runs in.
|
void |
setMessageSizeLimit(int messageSizeLimit)
Configure the maximum size allowed for an incoming STOMP message.
|
void |
setUserSessionRegistry(UserSessionRegistry registry)
Provide a registry with which to register active user session ids.
|
public static final int MINIMUM_WEBSOCKET_MESSAGE_SIZE
public static final java.lang.String CONNECTED_USER_HEADER
private static final Log logger
private int messageSizeLimit
private final java.util.Map<java.lang.String,BufferingStompDecoder> decoders
private final StompEncoder stompEncoder
private UserSessionRegistry userSessionRegistry
private ApplicationEventPublisher eventPublisher
public void setMessageSizeLimit(int messageSizeLimit)
By default this property is set to 64K.
public int getMessageSizeLimit()
public void setUserSessionRegistry(UserSessionRegistry registry)
UserDestinationMessageHandler
public UserSessionRegistry getUserSessionRegistry()
public java.util.List<java.lang.String> getSupportedProtocols()
SubProtocolHandler
null
.getSupportedProtocols
in interface SubProtocolHandler
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
ApplicationEventPublisherAware
Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.
setApplicationEventPublisher
in interface ApplicationEventPublisherAware
applicationEventPublisher
- event publisher to be used by this objectpublic void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage, MessageChannel outputChannel)
handleMessageFromClient
in interface SubProtocolHandler
session
- the client sessionwebSocketMessage
- the client messageoutputChannel
- an output channel to send messages toprivate void publishEvent(ApplicationEvent event)
protected void sendErrorMessage(WebSocketSession session, java.lang.Throwable error)
public void handleMessageToClient(WebSocketSession session, Message<?> message)
handleMessageToClient
in interface SubProtocolHandler
session
- the client sessionmessage
- the client messageprivate java.lang.String getVersion(StompHeaderAccessor connectAckHeaders)
private void afterStompSessionConnected(StompHeaderAccessor headers, WebSocketSession session)
private java.lang.String resolveNameForUserSessionRegistry(java.security.Principal principal)
public java.lang.String resolveSessionId(Message<?> message)
SubProtocolHandler
null
.resolveSessionId
in interface SubProtocolHandler
message
- the message to resolve the session id frompublic void afterSessionStarted(WebSocketSession session, MessageChannel outputChannel)
SubProtocolHandler
WebSocketSession
has started.afterSessionStarted
in interface SubProtocolHandler
session
- the client sessionoutputChannel
- a channelpublic void afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel)
SubProtocolHandler
WebSocketSession
has ended.afterSessionEnded
in interface SubProtocolHandler
session
- the client sessioncloseStatus
- the reason why the session was closedoutputChannel
- a channel