2014-06-18 14 views
10

Sto provando a implementare una notifica push in primavera utilizzando websocket e con l'uso di sock.js.Websocket: Come inviare un messaggio a un utente target

Questi sono i frammenti di codice:

public class NotifyController { 

     @MessageMapping("/notifications") 
     @SendTo("/get/notifications") 
     public Greeting greeting(HelloMessage message) throws Exception { 
      new Greeting("Hello, " + message.getName() + "!"); 
     } 
    } 


    public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 
     @Override 
     public void configureMessageBroker(MessageBrokerRegistry config) { 
      config.enableSimpleBroker("/get/notifications"); 
      config.setApplicationDestinationPrefixes("/gssocket"); 
     } 

     @Override 
     public void registerStompEndpoints(StompEndpointRegistry registry) { 
      registry.addEndpoint("/notifications").withSockJS(); 
     } 
    } 

Questo è il codice nella parte anteriore ..

function connect() { 
     var notificationSocket = new SockJS('/notifications'); 
     stompNotificationClient = Stomp.over(notificationSocket); 

     stompNotificationClient.connect({}, function(frame) { 
      console.log('Connected: ' + frame); 
      stompNotificationClient.subscribe('/get/notifications', function(greeting){ 
       showGreeting(JSON.parse(greeting.body).content); 
      }); 
     }); 
    } 

    function sendNotification() { 
     var name = "test" 
     stompNotificationClient.send("/gssocket/notifications", {}, JSON.stringify({ 'name': name })); 
    } 

ho già riuscito a farlo funzionare. Ma la domanda è: come posso inviare il messaggio a determinati utenti target. Ad esempio, ci sono 5 utenti online: utente1, utente2, utente3, utente4 e utente5. Voglio che la notifica sia pubblicata solo su user1 e user2. Puoi darmi qualche idea su come ottenere questo? Sto pensando di farlo nel back-end o nel frontend. O c'è un altro modo per ottenere questo usando la primavera.

Qualcuno mi aiuti per favore.

Grazie.

+0

http://stackoverflow.com/questions/23594671/spring-websocket-notification/23596605#23596605 –

risposta

5

È possibile controllare User destinations per indirizzare gli utenti specifici ai messaggi, utilizzando la chiamata SimpMessagingTemplate.convertAndSendToUser().

Si noti che per abilitare questa funzionalità gli utenti devono essere autenticati tramite HTTP.

+0

Ma questo non aiuta veramente. Quando si utilizza 'SimpMessageTemplate.convertAndSendToUser', se si guarda il codice, si limita letteralmente a '/ user/{username}' e quindi utilizza il metodo' SimpMessageTemplate.convertAndSend'. In realtà non affronta il problema della sicurezza. – Nitroware

+0

Sì, è così: è una coda speciale in cui un sessionId univoco dell'utente viene aggiunto alla destinazione e rimosso in modo trasparente dal broker. Provalo e verifica che solo l'utente originatore sia in grado di ricevere i messaggi inviati lì: tutti gli altri client non lo sono. –

Problemi correlati