私信春天websocket

时间:2017-07-25 16:08:22

标签: java jquery spring websocket stomp

我正在学习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。 提前谢谢。

2 个答案:

答案 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进行设置。