Ich habe ein paar Threads zu diesem Thema gesehen, aber keiner von ihnen scheint die Frage direkt zu beantworten.
Hintergrund, ich habe Federsicherheit installiert, funktioniert und läuft reibungslos in anderen Teilen der Anwendung. Mein Benutzername ist "Entwickler".
Wird auf Java 7, Glassfish 4, Spring 4 und mit Angular + StompJS ausgeführt
Lass uns hier einen Code bekommen:
%Vor%Ok, jetzt hier ist ein Controller, um alle 3 Sekunden Zeug zu senden:
%Vor%Und schließlich das JavaScript mit SockJS
%Vor%Und schließlich, für Tritte, die pom.xml
%Vor%Hier ist was funktioniert:
messagingTemplate.convertAndSend
und messagingTemplate.convertAndSendToUser
Dies ist das Problem (oben erwähnt): Jeder kann andere Benutzer-Feeds abonnieren.
Nun, es gibt ein paar andere Versionen davon herum, ich werde sie unten auflisten und erklären, warum die Antworten falsch sind:
Was sind die Sicherheitsprobleme bei einem offenen Websocket? Verbindung?
Websocket: Wie man drückt Eine Nachricht an einen Zielbenutzer
Hier ist das Problem:
Schauen Sie sich messagingTemplate.convertAndSendToUser
an - Sie fügen lediglich das "Benutzerpräfix" und dann den angegebenen Benutzernamen hinzu und verwenden dann messagingTemplate.convertAndSend
, was keine Sicherheit darstellt.
Dann sagen die Leute, dass "Sie Federsicherheit wie überall verwenden müssen" - das Problem hier ist A), dass ich Daten asynchron an den Client sende, also B) Ich werde diesen Code vollständig außerhalb verwenden der Sitzung des Benutzers, möglicherweise von einem anderen Benutzer (sagen wir, um eine Benachrichtigung an einen anderen angemeldeten Benutzer zu senden).
Lass es mich wissen, wenn das zu eng mit einem anderen Beitrag zusammenhängt, aber das ist ein großes Problem für mich und ich wollte dem gerecht werden.
Ich kann jedoch mehr Details bekommen, wenn jemand mehr Details benötigt.
New Spring Security 4x unterstützt nun den Web-Socket vollständig. Sie können den Link verwenden Vorschau der Spring Security WebSocket-Unterstützung
Oder SpringSecuritySupportWebSocket.html , falls Sie ein vollständiges Beispiel benötigen,
Ich denke, Sie müssen diese Änderungen vornehmen:
1) Sie dürfenSimpleBroker nicht für "/ user" aktivieren, da es sich um eine spezielle vom Broker automatisch bearbeitete Warteschlange handelt.
2) Wenn der Server beispielsweise die Annotation "@SendToUser (" / queue / private ") verwendet, muss der Client die Warteschlange" / user / queue / private "abonnieren: Sie dürfen den Benutzernamen in der Warteschlange nicht vorgeben weil es eine transparente Operation ist, die vom Broker behandelt wird.
Ich bin sicher, das funktioniert richtig, weil ich es in meinem Setup verwende.
Ich habe nicht mit der convertAndSendToUser () Methode versucht, aber da seine Semantik dieselbe wie die Annotation sein sollte, sollte es auch funktionieren.
Sie können die configureInbound-Methode in einer JavaConfig-Klasse überschreiben, indem Sie AbstractSecurityWebSocketMessageBrokerConfigurer erweitern.
%Vor%Dort können Sie Anmeldeinformationen zum Abonnieren eines Kanals, zum Senden von Nachrichten oder zu mehreren anderen Dingen konfigurieren, wie in der Spring WebSocket-Dokumentation Ссылка
Tags und Links java spring websocket spring-mvc spring-security