我正在学习spring websocket,我仍然坚持使用@DestinationVariable("username")
向特定用户发送消息的方式
这是我的代码
configuration
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketContextConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws-cfg").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/queue/","/topic","/exchange/")
.setRelayHost("localhost");
registry.setApplicationDestinationPrefixes("/app");
}
}
控制器
@MessageMapping("/chat.private.{username}")
public void filterPrivateMessage(@Payload Message message, @DestinationVariable("username") String username, Principal principal) {
this.simpMessagingTemplate.convertAndSendToUser(username, "/queue/chat.message", message);
}
客户端代码
var stomp = null;
stomp = Stomp.over(new SockJS("/ws-cfg"));
stomp.connect('guest', 'guest', function(frame) {
stomp.subscribe("/user/queue/chat.message", function (frame) {
dysplayMessage(JSON.parse(frame.body));
});
})
$("#sendMessage").click(function (event) {
event.preventDefault();
var message = $('#text').val();
var username="user@gmail.com";// i am lost in this part, i supose this must be the @DestinationVariable("username")
destination = "/app/chat.private."+to;
stomp.send(destination, {}, JSON.stringify({'text': message}));
$('#text').val("");
});
我目前正在使用带弹簧安全性的websocket。如何在@DestinationVariable("username")
方法上设置stomp.send
。
提前谢谢。
答案 0 :(得分:0)
查看具有您所需内容的Spring WebSocket Chat示例:https://github.com/salmar/spring-websocket-chat
答案 1 :(得分:0)
目标变量从您要发送的有效负载中填充。在您的情况下,您必须这样包含它
stomp.send(destination, {}, JSON.stringify({'text': message, 'username' : 'User1'}));
另一个观察结果是您似乎没有设置UserDestinationPrefix。您需要同时为MessageBrokerRegistry和SimpMessagingTemplate进行设置。