Ich habe ein Problem, wenn ich versuche, eine Nachricht von Client zu Server auf Spring WebSocket zu senden. Ich habe Konfiguration Websocket auf dem Server und @Message auf dem Controller erstellen. Ich sende Daten vom Client über Javascript. Es nur manchmal funktionieren, aber es manchmal nicht und die Nachricht auf Server werfen: MissingSessionUserException: Nein "user" Header in NachrichtSpring Websocket MissingSessionUserException: Keine "Benutzer" -Kopfzeile in der Nachricht
Here're mein WebsocketConfig:
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/connectsocket").withSockJS();
}
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/");
}
}
Here're mein MessageController:
@RestController
public class MessageController {
@Autowired
private SimpMessagingTemplate template;
@MessageMapping("/websocket/message")
public synchronized void message(Message<Object> messageObj,
WebMessage message, Principal principal) throws Exception {
if (principal != null) {
String name = principal.getName();
template.convertAndSendToUser(name, "/topic/dynamic", new MessagePojo("stage", "value", "message"));
}
}
}
Here're mein Javascript-Code Backbone.js:
app.Models.WebsocketModel = Backbone.Model.extend({
fetchData : function() {
console.log("WebsocketModel: fetchData");
var socket = new SockJS(url + "/connectsocket");
var client = Stomp.over(socket);
var onConnect = function(frame) {
console.log('Connected: ' + frame);
client.subscribe("/user/topic/dynamic", function(data) {
var jsonBody = JSON.parse(data.body);
console.log(jsonBody);
});
};
client.connect({}, onConnect);
setInterval(function() {
client.send("/websocket/message", {}, JSON.stringify({
"message" : "Hello world!!!",
"toUser" : "Someone"
}));
}, 10000);
}
});
Here're mein Server-Fehlerprotokoll:
[2016 Apr 14 - 02:13:19] ERROR: [org.springframework.web.socket.messaging.WebSocketAnnotationMethodMessageHandler] - Unhandled exception org.springframework.messaging.simp.annotation.support.MissingSessionUserException: No "user" header in message at org.springframework.messaging.simp.annotation.support.PrincipalMethodArgumentResolver.resolveArgument(PrincipalMethodArgumentResolver.java:42) at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:139) at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:108) at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:490) at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:497) at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:87) at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:451) at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:389) at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:135) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
Vielen Dank für Ihren Kommentar @Stanley. Ich habe meine Probleme vor langer Zeit gelöst und es ist das gleiche mit Ihnen Vorschlag. Es wird für andere wie mich hilfreich sein. In der Vergangenheit habe ich Header im Netzwerk überprüft, bevor der Client an den Server sendet, dann sehe ich fehlende Benutzerauthentifizierung. Danach füge ich einfach die Benutzerauthentifizierung hinzu, bevor der Client zum Server sendet, und es funktioniert einwandfrei. –