Spring Web Socket - send to user (#4135)
This commit is contained in:
parent
c5af483a8d
commit
a86f9de2cd
|
@ -148,6 +148,13 @@
|
||||||
<artifactId>javax.el</artifactId>
|
<artifactId>javax.el</artifactId>
|
||||||
<version>2.2.4</version>
|
<version>2.2.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Web socket to user example -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.baeldung.spring.web.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.server.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.ServerHttpResponse;
|
||||||
|
import org.springframework.http.server.ServletServerHttpRequest;
|
||||||
|
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
|
||||||
|
import org.springframework.web.socket.WebSocketHandler;
|
||||||
|
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
|
||||||
|
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
|
||||||
|
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
|
||||||
|
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSocketMessageBroker
|
||||||
|
public class WebSocketSendToUserConfig extends AbstractWebSocketMessageBrokerConfigurer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void configureMessageBroker(MessageBrokerRegistry config) {
|
||||||
|
config.enableSimpleBroker("/topic/", "/queue/");
|
||||||
|
config.setApplicationDestinationPrefixes("/app");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
||||||
|
registry.addEndpoint("/greeting").setHandshakeHandler(new DefaultHandshakeHandler() {
|
||||||
|
|
||||||
|
//Get sessionId from request and set it in Map attributes
|
||||||
|
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
|
||||||
|
Map attributes) throws Exception {
|
||||||
|
if (request instanceof ServletServerHttpRequest) {
|
||||||
|
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
|
||||||
|
HttpSession session = servletRequest.getServletRequest().getSession();
|
||||||
|
attributes.put("sessionId", session.getId());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}}).withSockJS();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.web.controller;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.messaging.handler.annotation.MessageExceptionHandler;
|
||||||
|
import org.springframework.messaging.handler.annotation.MessageMapping;
|
||||||
|
import org.springframework.messaging.handler.annotation.Payload;
|
||||||
|
import org.springframework.messaging.simp.SimpMessageSendingOperations;
|
||||||
|
import org.springframework.messaging.simp.annotation.SendToUser;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class WebsocketSendToUserController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SimpMessageSendingOperations messagingTemplate;
|
||||||
|
|
||||||
|
private Gson gson = new Gson();
|
||||||
|
|
||||||
|
@MessageMapping("/message")
|
||||||
|
@SendToUser("/queue/reply")
|
||||||
|
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception {
|
||||||
|
return gson.fromJson(message, Map.class).get("name").toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@MessageExceptionHandler
|
||||||
|
@SendToUser("/queue/errors")
|
||||||
|
public String handleException(Throwable exception) {
|
||||||
|
return exception.getMessage();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
function connect() {
|
||||||
|
var socket = new WebSocket('ws://localhost:8080/greeting');
|
||||||
|
ws = Stomp.over(socket);
|
||||||
|
|
||||||
|
ws.connect({}, function(frame) {
|
||||||
|
ws.subscribe("/user/queue/errors", function(message) {
|
||||||
|
alert("Error " + message.body);
|
||||||
|
});
|
||||||
|
|
||||||
|
ws.subscribe("/user/queue/reply", function(message) {
|
||||||
|
alert("Message " + message.body);
|
||||||
|
});
|
||||||
|
}, function(error) {
|
||||||
|
alert("STOMP error " + error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect() {
|
||||||
|
if (ws != null) {
|
||||||
|
ws.close();
|
||||||
|
}
|
||||||
|
setConnected(false);
|
||||||
|
console.log("Disconnected");
|
||||||
|
}
|
Loading…
Reference in New Issue