目前前端是这样断开连接的
stompClient.disconnect(function () {
console.log('断开连接');
}, getHeaders());
socket.close();
function getHeaders() {
return {
'X-Requested-With': 'X-Requested-With',
'Authorization': localStorage.token
}
}
然而吾辈发现后端并不能接收到 headers,查看了一下 官方文档。在对于 disconnect() 的描述中有下面这句话
# (void) disconnect(disconnectCallback, headers = {})
那么第二个参数应当是可以自定义的 headers 的呀,是哪里出了问题呢?
附:下面是后端 Java 的监听连接关闭的代码
/**
* 会话事件监听基类
*
* @author rxliuli
*/
public abstract class BaseSessionEventListener implements ApplicationListener {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired
protected SocketSessionRegistry webAgentSessionRegistry;
/**
* 计算出 user id 和 session id 并传入到自定义的函数中
*
* @param event 事件
* @param biConsumer 自定义的操作
*/
protected void using(Event event, BiConsumer biConsumer) {
StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
//login get from browser
List shaNativeHeader = sha.getNativeHeader("Authorization");
String user = shaNativeHeader == null || shaNativeHeader.isEmpty() ? null : shaNativeHeader.get(0);
//如果当前用户没有登录(没有认证信息),就添加到游客里面
if (user == null || "".equals(user) || "undefined".equals(user) || "null".equals(user)) {
user = SocketSessionRegistry.DIRECT_TOURIST;
}
String sessionId = sha.getSessionId();
biConsumer.accept(user, sessionId);
}
}
/**
* Socket 会话断开监听
*
* @author rxliuli
*/
@Component
public class SessionDisconnectEventListener extends BaseSessionEventListener {
@Override
public void onApplicationEvent(SessionDisconnectEvent event) {
using(event, (user, sessionId) -> webAgentSessionRegistry.unregisterSessionId(user, sessionId));
}
}
亦或是吾辈的后端取值有什么问题呢?(=^・ω・^)y=