2016-05-28 5 views
0

同じSpring Securityユーザで2つのセッションに接続し、Spring 4.2.4を使用して同じキューに登録しようとしています。私は各セッションごとに別々のメッセージを出したいと思います。 @SendToUserを使用するのは簡単ですが、SimpMessagingTemplate.sendToUser(...)を使用するとそれほど簡単ではないようです - すべてのセッションが他のセッションに固有のすべてのメッセージを受信します。 @SendToUserためSpring 4.2.4でSimpMessageTemplate.sentToUser(...)でブロードキャストを無効にする

例:SimpMessagingTemplateため

@Controller 
public class TestController { 

    @MessageMapping("/queue/hello") 
    @SendToUser(value = "/queue/hello", broadcast = false) 
    public String test() { 
     return Integer.toString(new Random().nextInt()); 
    } 

} 

例:

template.convertAndSendToUser("SessionUser{id=123}", "/queue/hello", "test"); 

私はこのスレッドでは、たとえば提案として、ヘッダにsessionIdを追加しようとしました: sending-error-message-in-spring-websockets 残念ながら、それは解決しませんこのバージョンのSpringでは 誰にもアイデアはありますか?

答えて

0

ヘッダーのセッションIDの設定はまだ有効ですが、sessionIdではなくsimpSessionIdである必要があります。問題がどこにあるのかに関する私の前提は、すべて間違っていた。ヘッダはによって作成され

simpMessagingTemplate.convertAndSendToUser("SessionUser{id=123}", "/queue/hello", "test", headers); 

:simpSessionId

private MessageHeaders createHeaders(String sessionId) { 
    SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); 
    headerAccessor.setSessionId(sessionId); 
    headerAccessor.setLeaveMutable(true); 
    return headerAccessor.getMessageHeaders(); 
} 

およびアクセスには、我々が使用する必要があります。

SimpMessageHeaderAccessor.getSessionId(message.getHeaders()) 

ホープ、これは便利です要約すると、我々は、このオーバーロードされたメソッドを使用することができます誰か。

関連する問題