У меня есть следующие функции JS, которые подключаются к WebSocket через STOMP и обрабатывают события onConnected
соответственно.
function connect(event) {
username = document.querySelector('#name').value.trim();
if(username) {
usernamePage.classList.add('hidden');
chatPage.classList.remove('hidden');
var socket = new SockJS('/ws');
stompClient = Stomp.over(socket);
stompClient.connect({}, onConnected, onError);
}
event.preventDefault();
}
function onConnected(response) {
console.log(response);
// Subscribe to the Public Topic
stompClient.subscribe('/topic/public', onMessageReceived);
// Tell your username to the server
stompClient.send("/app/chat.addUser",
{},
JSON.stringify({sender: username, type: 'JOIN'})
)
connectingElement.classList.add('hidden');
}
Теперь первая строка функции onConnected
, этозаписывает следующее в консоль, что, по-видимому, похоже на то, к чему я мог бы добавить дополнительные данные со стороны сервера.
{
command: "CONNECTED",
headers: {
"heart-beat": "0,0",
version: "1.1"
},
body: ""
}
У меня также есть HttpHandshakeInterceptor
, который реализует HandshakeInterceptor
следующим образом.
@Override
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());
ServletServerHttpResponse servletResponse = (ServletServerHttpResponse) response;
response.getHeaders().set("KEY","VALUE"); // *** I want this either to be in the response header or the body.
}
return true;
}
Строка с комментарием, начинающимся с ***
, - это то, что я делаю сейчас безуспешно.Что я делаю неправильно?Могу ли я даже сделать это и получить некоторые параметры для клиента?Если я делаю это неправильно, как и где это сделать правильно?(потому что теперь я начинаю чувствовать, что пытаюсь сделать это не в том месте)