私はSTOMP 'CREATED'メッセージにカスタムヘッダーを追加しようとしています。このメッセージは、最初の接続時にクライアントによって受信されます。ここでSTOMP JavaScriptを使用してのWebSocketに接続する機能は次のとおりです。
SpringブートアプリケーションのSTOMP CREATEDメッセージにカスタムヘッダーを追加する方法は?
function connect() {
socket = new SockJS('/chat');
stompClient = Stomp.over(socket);
stompClient.connect('', '', function(frame) {
whoami = frame.headers['user-name'];
console.log(frame);
stompClient.subscribe('/user/queue/messages', function(message) {
console.log("MESSAGE RECEIVED:");
console.log(message);
showMessage(JSON.parse(message.body));
});
stompClient.subscribe('/topic/active', function(activeMembers) {
showActive(activeMembers);
});
});
}
この機能は、ブラウザのコンソールに次のように出力されます
body: ""
command: "CONNECTED"
headers: Object
heart-beat: "0,0"
user-name: "someuser"
version: "1.1"
と私は出力がどのように見える必要がありますので、カスタムヘッダーを追加します:
body: ""
command: "CONNECTED"
headers: Object
heart-beat: "0,0"
user-name: "someuser"
version: "1.1"
custom-header: "foo"
Spring Bootアプリケーションでは、次のWebSocket設定があります。
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/queue", "/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat", "/activeUsers")
.withSockJS()
.setInterceptors(customHttpSessionHandshakeInterceptor());
}
...
@Bean
public CustomHttpSessionHandshakeInterceptor
customHttpSessionHandshakeInterceptor() {
return new CustomHttpSessionHandshakeInterceptor();
}
}
私は、カスタムヘッダーを設定するには 'HandshakeInterceptor' を登録しようとしたが、それはうまくいきませんでした。ここにCustomHttpSessionHandshakeInterceptor 'です:このアプローチが動作しない理由を
CustomHttpSessionHandshakeInterceptor.javaが
public class CustomHttpSessionHandshakeInterceptor implements
HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest =
(ServletServerHttpRequest) request;
attributes.put("custom-header", "foo");
}
return true;
}
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response,
WebSocketHandler wsHandler,
Exception ex) { }
}
私はhttps://dzone.com/articles/spring-boot-based-websocket
で、このコードスニペットを見つけた誰かが私に説明できますか? Springブートアプリケーションのサーバー側でカスタムヘッダーをSTOMP 'CREATED'メッセージに設定する別の方法はありますか?
ありがとうございます!
はい、i「はMessageHeaderAccessor」を使用しようとしましたが、それはSTOMP「MESSAGE」コマンドを使用して、メッセージのために完璧に動作します(Springのと注釈を付けた方法で処理される通常のメッセージに対して「@MessageMapping」とで「SimpMessagingTemplate」によって送られました私の場合)。質問は、WebSocket接続を確立した後にサーバーによって送信されたSTOMP 'CONNECTED'コマンドでカスタムヘッダーを追加する方法です。 –