我无法让用户目的地使用Spring STOMP websockets。
我似乎有一般的配置工作。例如,以下工作。
客户端:
svc.stompClient.subscribe('/queue/messages', msg );
服务器:
stompTemplate.convertAndSend("/queue/messages", msg);
但是,当我尝试按如下方式发送到特定用户目的地时:
客户端:
svc.stompClient.subscribe('/user/queue/messages', msg );
服务器:
stompTemplate.convertAndSendToUser(username, "/queue/messages", msg);
......似乎没有任何事情发生。
我已设置SessionConnectedEvent
和SessionSubscribeEvent
个侦听器,其中显示:
SessionConnectedEvent[GenericMessage [
payload=byte[0],
headers={
simpMessageType=CONNECT_ACK,
simpConnectMessage=GenericMessage [
payload=byte[0],
headers={
simpMessageType=CONNECT,
stompCommand=CONNECT,
nativeHeaders={
accept-version=[1.1,1.0],
heart-beat=[10000,10000]
},
simpSessionAttributes={},
simpSessionId=erlz0dm6
}
],
simpSessionId=erlz0dm6
}
]]
SessionSubscribeEvent[GenericMessage [
payload=byte[0],
headers={
simpMessageType=SUBSCRIBE,
stompCommand=SUBSCRIBE,
nativeHeaders={
id=[sub-0],
destination=[/user/queue/messages]
},
simpSessionAttributes={},
simpSubscriptionId=sub-0,
simpSessionId=erlz0dm6,
simpDestination=/user/queue/messages
}
]]
在客户端,我看到以下内容:
>>> SUBSCRIBE
id:sub-0
destination:/user/queue/messages
通过sendToUser
方法跟踪,我可以看到它正在将/user/myusername/queue/messages
传递到目标解析器。但是,服务器上没有记录任何内容,客户端也没有收到消息。
所以我很想确定:
如果我可以提供任何其他信息(即代码)以帮助诊断问题,请告知我们。问题已经很长了,所以我试图避免使用过多的无关代码来混淆它。
我正在使用:
另外,如果它是相关的,我使用PreAuthenticatedAuthenticationProvider
来确定用户,并使用HttpServletRequestWrapper
来确保标头中定义的用户名是Principal
。 1}}名字。即上面代码中的用户名是我的Active Directory域用户名。
注意 - 我检查了this question,听起来有点类似。但是,他们的工作代码'是我努力工作,但没有成功。