【发布时间】:2017-02-16 16:06:42
【问题描述】:
我的目标是将具有正确标头的浏览器客户端与服务器连接。我从 StompClient 传递这些标头。
我在标题中传递 token 的 UI 代码是
function connect() {
var socket = new SockJS('/websocket/api/add');
stompClient = Stomp.over(socket);
stompClient.connect({"token" : "12345"}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
});
}
在后端,我可以读取 ChannelInterceptorAdapter
的 preSend() 方法中的标头@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
MessageHeaders headers = message.getHeaders();
System.out.println("preSend : HEADERS : {}" + headers);
return super.preSend(message, channel);
}
但是在这里我无法关闭 wesocket 会话。我们该怎么做?
我也能够关闭 websocket 会话,但我无法在 WebSocketHandlerDecorator
的 afterConnectionEstablished() 方法中接收标头public void configureWebSocketTransport(final WebSocketTransportRegistration registration) {
registration.addDecoratorFactory(new WebSocketHandlerDecoratorFactory() {
@Override
public WebSocketHandler decorate(final WebSocketHandler handler) {
return new WebSocketHandlerDecorator(handler) {
@Override
public void afterConnectionEstablished(final WebSocketSession session) throws Exception {
session.close(CloseStatus.NOT_ACCEPTABLE);
super.afterConnectionEstablished(session);
}
};
}
});
super.configureWebSocketTransport(registration);
}
有人可以指导我如何根据我们从服务器端的 UI 传递的标头关闭 websocketsession 吗?
【问题讨论】:
标签: java spring-mvc websocket stomp