Spring Stomp @SendToUser mit nicht authentifizierten Benutzer funktioniert nicht
Ich versuche zu reagieren, um einem nicht authentifizierten Benutzer mit @SendToUser
.
- Frühjahr 4.1.1
Ich bin mit einem neu erstellten Spring-Boot-Anwendung, und die einzige config die ich habe, ist:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
registry.setUserDestinationPrefix("/user");
}
}
Controller-code:
@MessageMapping("/search")
@SendToUser("/search")
public String search(@Payload String xxx) {
return "TEST1234";
}
JS:
var socket = new SockJS('/webapp/stomp');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/user/search', function(data){
alert(data.body);
});
});
Frühling Ausgabe:
DEBUG org.springframework.web.servlet.DispatcherServlet: 996 - Successfully completed request
DEBUG o.s.w.s.handler.LoggingWebSocketHandlerDecorator: 45 - New WebSocketServerSockJsSession[id=shizav88]
DEBUG o.s.m.simp.broker.SimpleBrokerMessageHandler: 158 - Processing CONNECT session=shizav88
DEBUG o.s.m.simp.user.UserDestinationMessageHandler: 187 - Translated /user/search -> [/search-usershizav88]
JS:
var name = document.getElementById('name').value;
stompClient.send("/app/search", {}, "test"));
Frühling Ausgabe:
DEBUG o.s.m.s.a.s.SimpAnnotationMethodMessageHandler: 348 - Searching methods to handle SEND /app/search session=shizav88
DEBUG o.s.m.s.a.s.SimpAnnotationMethodMessageHandler: 446 - Invoking de.benneq.next.search.SearchController#search[1 args]
DEBUG o.s.b.factory.support.DefaultListableBeanFactory: 247 - Returning cached instance of singleton bean 'searchController'
DEBUG o.s.m.simp.user.UserDestinationMessageHandler: 187 - Translated /user/shizav88/search -> [/search-usershizav88]
Für mich sieht es aus wie Frühling Karten im Abonnement /search-usershizav88
. Und dann nutzt /search-usershizav88
zum senden der Antwort. Aber meine JS-client nicht erhalten nichts.
Was ist das problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich jetzt habe es funktioniert, aber ich weiß wirklich nicht, WARUM:
Config:
Controller:
JS:
Frühling Ausgabe:
Gibt es jetzt eine zusätzliche Zeile in der log, welches sagt, dass es Verarbeitung ABONNIEREN /queue/Suche-userfkbmnpkj id=sub-0 session=fkbmnpkj
Die uns vorher fehlte.
Wäre es noch nett, wenn jemand erklären könnte, warum brauche ich die
/queue
Zuordnung damit Sie richtig funktionieren.registry.enableSimpleBroker("/queue", "/topic"); // <- added "/queue"
Im ersten post, den Sie abonnieren unter "/Benutzer/suchen".
Im zweiten "/Benutzer/queue/Suche".
Ich checked "/Benutzer/Thema/Suche" und es funktioniert auch.
So Lösung ist die Verwendung valid-topic-name. Keine Magie...