2014-06-18 10 views
10

Próbuję zaimplementować powiadomienie push wiosną, używając websocket i przy użyciu sock.js.Websocket: Jak przekazać wiadomość do docelowego użytkownika

Są to fragmenty kodu:

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(); 
     } 
    } 

Jest to kod z przodu ..

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 })); 
    } 

Już udało się tego dokonać. Ale pytanie brzmi: jak mogę przekazać wiadomość do niektórych docelowych użytkowników. Na przykład jest 5 użytkowników online, a mianowicie: użytkownik1, użytkownik2, użytkownik3, użytkownik4 i użytkownik5. Chcę, aby powiadomienie zostało opublikowane tylko dla użytkownika 1 i użytkownika 2. Czy możesz mi powiedzieć, jak to osiągnąć? Myślę o tym, czy robię to w backendu, czy w interfejsie. Lub jest inny sposób, aby osiągnąć to za pomocą wiosny.

Ktoś mi pomóc.

Dziękuję.

+0

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

Odpowiedz

5

Możesz sprawdzić User destinations, aby dotrzeć do określonych użytkowników za pomocą wiadomości, odbywa się to za pomocą wywołania SimpMessagingTemplate.convertAndSendToUser().

Należy pamiętać, że aby włączyć tę funkcję, użytkownicy muszą być uwierzytelnieni HTTP.

+0

Ale to naprawdę nie pomaga. Kiedy używasz 'SimpMessageTemplate.convertAndSendToUser', jeśli spojrzysz na kod, dosłownie po prostu przedrostuje"/user/{username} ", a następnie używa metody' SimpMessageTemplate.convertAndSend'. W rzeczywistości nie rozwiązuje problemu bezpieczeństwa. – Nitroware

+0

Tak, działa: jest to specjalna kolejka, w której unikalny identyfikator sesji użytkownika jest dołączany do miejsca docelowego i usuwany w przejrzysty sposób przez broker. Wypróbuj i sprawdź, czy tylko otrzymujący użytkownik może odbierać wiadomości wysłane: wszyscy inni klienci nie. –

Powiązane problemy