La risposta sopra non ha funzionato per me. Si scopre che con Spring 4.1.4 è richiesto qualcosa di leggermente diverso.
Il modo che sembra il più pulito che mi appare come il seguente:
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create();
headerAccessor.setSessionId(cmd.getSessionId());
headerAccessor.setLeaveMutable(true);
MessageHeaders messageHeaders = headerAccessor.getMessageHeaders();
messagingTemplate.convertAndSendToUser(cmd.getPrincipal().getName(),
"/queue/responses", ret, messageHeaders);
L'altro modo che ha funzionato è stato quello di aggiungere in modo esplicito un valore "nativeHeaders" al Map inviato a SimpMessagingTemplate.convertAndSendToUser(). Tuttavia, in questo modo sembra dipendere troppo sui dettagli di implementazione:
Map<String, Object> headers = new HashMap<>();
headers.put("nativeHeaders", new HashMap<String, Object>());
headers.put(SimpMessageHeaderAccessor.SESSION_ID_HEADER, cmd.getSessionId());
messagingTemplate.convertAndSendToUser(cmd.getPrincipal().getName(),
"/queue/responses", ret, headers);
Il "codice incriminato", che ha reso l'impostazione l'intestazione "simpSessionId" e niente altro in una Mappa non lavoro era in SimpMessagingTemplate.processHeaders() e MessageHeaderAccessor .getAccessor (MessageHeaders, Classe requiredType).
Come posso ottenere 'sessionId' se il mio metodo è annotato con' @RequestMapping() ', in questo metodo, dopo un po 'di lavoro fatto Voglio avvisare gli altri utenti, grazie. –
Per favore, inizia una nuova domanda SO –
per favore dare un'occhiata a [Come iscriversi usando l'integrazione Sping Websocket su userName specifico (userId) + ricevere notifiche dal metodo anotato con @RequestMapping?] (Https://stackoverflow.com/q/ 47628608/3425489) –