Überprüfen Sie Auth, während Sie eine Nachricht an einen bestimmten Benutzer senden, indem Sie im Frühjahr STOMP und WebSocket verwenden

7

Ich entwickle ein Echtzeitbenachrichtigungssystem in Spring 4 mithilfe eines integrierten Message Brokers und STOMP über WebSocket .

Ich möchte in der Lage sein, Nachrichten an einen bestimmten Benutzer gemäß seinem Benutzernamen zu senden. Um dieses Ziel zu erreichen, verwende ich die Methode convertAndSendToUser von org.springframework.messaging.simp.SimpMessagingTemplate wie folgt:

%Vor%

Als Konfiguration:

%Vor%

Client-seitig (über JavaScript ), ich sollte einen Kanal abonnieren, indem ich den Benutzernamen (entsprechend einer anderen sehr ähnlichen Frage: Senden einer Nachricht an bestimmte Benutzer auf Spring Websocket ).

%Vor%

Dieser letzte Punkt klingt komisch ...

Angenommen, ich bin als w.white auf meiner Webapp angemeldet, indem ich Folgendes abonniere:

%Vor%

... Ich werde Nachrichten sehen können, die an w.white gesendet werden, und das ist großartig ... Aber abonnieren:

%Vor%

... Ich werde auch Nachrichten sehen können, die an j.pinkman gesendet wurden, und bitte, dass ich momentan als w.white angemeldet bin.

Es ist ein Weg, um dieses Problem zu überwinden?

Aktualisieren

Unten ist das Protokoll über die Verbindung über WebSocket:

%Vor%     
vdenotaris 03.09.2014, 14:14
quelle

2 Antworten

16

Ich habe die Lösung gefunden.

Zunächst ist es wichtig zu wissen, dass der Kanal /user bereits von Spring STOMP verwaltet wird, und übrigens keine Registrierung erforderlich ist.

Also:

%Vor%

Dann habe ich den Zielkanal als /queue/horray :

eingerichtet %Vor%

Endlich auf dem Client:

%Vor%

Jetzt funktioniert es gut! Nachrichten werden nur an den angegebenen Empfänger gesendet, entsprechend dem vom Sicherheitskontext abgerufenen Principal .

    
vdenotaris 03.09.2014, 15:07
quelle
6

Da Benutzer in meiner Anwendung nicht authentifiziert sind, habe ich einfach die Sitzungs-ID verwendet, um die verschiedenen Themen zu unterscheiden

auf dem Server:

%Vor%

Und der Client ist ziemlich einfach

%Vor%

Vielleicht nicht der sauberste Weg, aber es funktioniert, und ohne Authentifizierung konnte ich den / user channel

nicht nutzen     
Alexandre Langlais 22.06.2015 21:30
quelle