Spring Web Socket - send to user (#4135)
This commit is contained in:
parent
c5af483a8d
commit
a86f9de2cd
|
@ -148,6 +148,13 @@
|
|||
<artifactId>javax.el</artifactId>
|
||||
<version>2.2.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Web socket to user example -->
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<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