私のJavaScriptクライアントでは、SockJSではなくstomp.jsを使用しています。私はを使用してwebsocketに接続しています
stompClient.connect({}, function (frame) {
sockJS接続でのストンプには2つのhttpリクエストがあります。
クライアントはすべてのCookieを送信します。カスタムヘッダー(XSRFヘッダーなど)も送信したいのですが、それを行う方法が見つかりませんでした。どんな助けにも感謝します。
@Rohitdevつまり、STOMPはWebSocket上のレイヤーであるため、基本的にはstompClientを使用して[〜#〜] http [〜#〜]ヘッダーを送信できません。そして、websocketsハンドシェイクが発生したときにのみ、カスタムヘッダーを送信する可能性があります。したがって、SockJSだけがこのヘッダーを送信できますが、いくつかの理由でこれを行わないでください: https://github.com/sockjs/sockjs-client/issues/196
カスタムヘッダー:
stompClient.connect({token: "ABC123"}, function(frame) { ... code ...});
カスタムヘッダーなし:
stompClient.connect({}, function(frame) { ... code ...});
JavaScriptでは、次を使用してSTOMPヘッダーを抽出できます。
username = frame.headers['user-name'];
サーバー側で、Spring Frameworkを使用している場合は、インターセプターを実装して、HTTPパラメーターをWebSockets STOMPヘッダーにコピーできます。
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");
...
}
}
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}));
}
ここでは、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}));
}