public class DefaultUserDestinationResolver extends Object implements UserDestinationResolver
UserDestinationResolver
that relies
on a SimpUserRegistry
to find active sessions for a user.
When a user attempts to subscribe, e.g. to "/user/queue/position-updates", the "/user" prefix is removed and a unique suffix added based on the session id, e.g. "/queue/position-updates-useri9oqdfzo" to ensure different users can subscribe to the same logical destination without colliding.
When sending to a user, e.g. "/user/{username}/queue/position-updates", the "/user/{username}" prefix is removed and a suffix based on active session id's is added, e.g. "/queue/position-updates-useri9oqdfzo".
Constructor and Description |
---|
DefaultUserDestinationResolver(SimpUserRegistry userRegistry)
Create an instance that will access user session id information through
the provided registry.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
checkDestination(String destination,
String requiredPrefix) |
String |
getDestinationPrefix()
Return the configured prefix for user destinations.
|
SimpUserRegistry |
getSimpUserRegistry()
Return the configured
SimpUserRegistry . |
protected String |
getTargetDestination(String sourceDestination,
String actualDestination,
String sessionId,
String user)
This method determines how to translate the source "user" destination to an
actual target destination for the given active user session.
|
UserDestinationResult |
resolveDestination(Message<?> message)
Resolve the given message with a user destination to one or more messages
with actual destinations, one for each active user session.
|
void |
setUserDestinationPrefix(String prefix)
The prefix used to identify user destinations.
|
String |
toString() |
public DefaultUserDestinationResolver(SimpUserRegistry userRegistry)
userRegistry
- the registry, never null
public SimpUserRegistry getSimpUserRegistry()
SimpUserRegistry
.public void setUserDestinationPrefix(String prefix)
The default prefix is "/user/".
prefix
- the prefix to usepublic String getDestinationPrefix()
public UserDestinationResult resolveDestination(Message<?> message)
UserDestinationResolver
resolveDestination
in interface UserDestinationResolver
message
- the message to try to resolvenull
if the source message does not contain a user destination.protected String getTargetDestination(String sourceDestination, String actualDestination, String sessionId, String user)
sourceDestination
- the source destination from the input message.actualDestination
- a subset of the destination without any user prefix.sessionId
- the id of an active user session, never null
.user
- the target user, possibly null
, e.g if not authenticated.null
if none