Java websocket在onOpen函数中获取自定义头

Java websocket在onOpen函数中获取自定义头,java,websocket,Java,Websocket,在我的websocket服务器中,我正在检索一个cutom头,我不想链接到它所在的会话。我已经得到了一个正在工作的ServerEndpointConfig.Configurator,它看起来像这样: public class WebSocketConfig extends ServerEndpointConfig.Configurator { private static final Logger LOG = LoggerFactory.getLogger(WebSocketConfi

在我的websocket服务器中,我正在检索一个cutom头,我不想链接到它所在的会话。我已经得到了一个正在工作的
ServerEndpointConfig.Configurator
,它看起来像这样:

public class WebSocketConfig extends ServerEndpointConfig.Configurator {

    private static final Logger LOG = LoggerFactory.getLogger(WebSocketConfig.class);

    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        Map<String, List<String>> headers = request.getHeaders();
        if (headers != null) {
            if (headers.containsKey("key")) {
                List<String> header = headers.get("key");
                if (header.size() > 0) {
                    LOG.info(header.get(0));
                }
            }
        }
    }
}
@ServerEndpoint(value = "/websocket", configurator = WebSocketConfig.class)
public class WebSocket {

    private static final Logger LOG = LoggerFactory.getLogger(WebSocket.class);

    public WebSocket() {
    }

    @OnOpen
    public void onOpen(Session session) {
        LOG.info("OnOpen");
    }

    @OnClose
    public void onClose(Session session) {
        LOG.info("OnClose");
    }

    @OnMessage
    public void onMessage(String message, Session session){
        LOG.info("OnMessage: " + message);
    }
}
在函数
onOpen
中,我想将会话链接保存到标题值。但是我怎样才能访问它呢


注意。

我找到了解决问题的方法,必须在路径中添加路径参数

不确定这是否是最佳解决方案

@ServerEndpoint(value = "/websocket/{key}", configurator = WebSocketConfig.class)
public class WebSocket {

    private static final Logger LOG = LoggerFactory.getLogger(WebSocket.class);

    public WebSocket() {
    }

    @OnOpen
    public void onOpen(Session session, @PathParam("key") String key) {
        LOG.info("OnOpen");
    }

    @OnClose
    public void onClose(Session session) {
        LOG.info("OnClose");
    }

    @OnMessage
    public void onMessage(String message, Session session){
        LOG.info("OnMessage: " + message);
    }
}

我找到了一个解决问题的方法,我必须在路径中添加路径参数

不确定这是否是最佳解决方案

@ServerEndpoint(value = "/websocket/{key}", configurator = WebSocketConfig.class)
public class WebSocket {

    private static final Logger LOG = LoggerFactory.getLogger(WebSocket.class);

    public WebSocket() {
    }

    @OnOpen
    public void onOpen(Session session, @PathParam("key") String key) {
        LOG.info("OnOpen");
    }

    @OnClose
    public void onClose(Session session) {
        LOG.info("OnClose");
    }

    @OnMessage
    public void onMessage(String message, Session session){
        LOG.info("OnMessage: " + message);
    }
}