H5W3
当前位置:H5W3 > 其他技术问题 > 正文

StompClient disconnect() 断开连接时如何自定义 headers?

目前前端是这样断开连接的

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<Event extends AbstractSubProtocolEvent> implements ApplicationListener<Event> {
    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<String, String> biConsumer) {
        StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
        //login get from browser
        List<String> 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<SessionDisconnectEvent> {
    @Override
    public void onApplicationEvent(SessionDisconnectEvent event) {
        using(event, (user, sessionId) -> webAgentSessionRegistry.unregisterSessionId(user, sessionId));
    }
}

亦或是吾辈的后端取值有什么问题呢?(=^・ω・^)y=

本文地址:H5W3 » StompClient disconnect() 断开连接时如何自定义 headers?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址