websockets example spring websocket stomp sockjs stompjs

spring - example - WebSocket Stomp sobre SockJS-cabeceras personalizadas http



websocket spring boot angular 4 (3)

@Rohitdev Así que, básicamente, no puedes enviar ningún encabezado HTTP usando stompClient, porque STOMP está sobre capas websockets, y solo cuando ocurre el handshake de websockets tenemos la posibilidad de enviar encabezados personalizados. Entonces, solo SockJS puede enviar estos encabezados, pero por alguna razón no hagas esto: https://github.com/sockjs/sockjs-client/issues/196

Estoy usando stomp.js sobre SockJS en mi cliente de JavaScript. Me estoy conectando a websocket usando

stompClient.connect({}, function (frame) {

pisa fuerte sobre la conexión sockJS tiene 2 solicitudes http:

  1. solicitud a / info
  2. solicitud de actualización http

el cliente envía todas las cookies También me gustaría enviar encabezados personalizados (por ejemplo, encabezado XSRF) pero no encontré la manera de hacerlo. Apreciará cualquier ayuda.



Encabezados personalizados:

stompClient.connect({token: "ABC123"}, function(frame) { ... code ...});

Sin encabezados personalizados:

stompClient.connect({}, function(frame) { ... code ...});

En Javascript, puedes extraer un encabezado STOMP usando:

username = frame.headers[''user-name''];

En el lado del servidor, si está utilizando Spring Framework, puede implementar un Interceptor para copiar los parámetros HTTP a los encabezados STOMP de WebSockets.

public class HttpSessionHandshakeInterceptor_personalised implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { // Set ip attribute to WebSocket session attributes.put("ip", request.getRemoteAddress()); // ============================================= CODIGO PERSONAL ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpServletRequest httpServletRequest = servletRequest.getServletRequest(); // httpServletRequest.getCookies(); // httpServletRequest.getParameter("inquiryId"); // httpServletRequest.getRemoteUser(); String token = httpServletRequest.getParameter("token"); } ... } }

Y para enviar mensajes sin parámetros STOMP:

function sendMessage() { var from = document.getElementById(''from'').value; var text = document.getElementById(''text'').value; stompClient.send("/app/chatchannel", {}, JSON.stringify({''from'':from, ''text'':text}));

}

y aquí está pasando parámetros a los encabezados STOMP.

function sendMessage() { var from = document.getElementById(''from'').value; var text = document.getElementById(''text'').value; stompClient.send("/app/chatchannel", {''token'':''AA123''}, JSON.stringify({''from'':from, ''text'':text}));

}