来自客户端的Java(Tomcat)websocket参数



我需要将一些参数从javascript客户端传递到Tomcat中的Java端点。

使用Tomcat,您可以@ServerEndpoint(value="/websocket") annote您的java类,然后这个类将成为您的websocket的端点。

也就是说,每次javascript调用new WebSocket("ws://localhost/websocket")时,您的annoted类都会被实例化。

现在,我想在实例化期间(即在构造函数中(将一个短字符串参数(或int,实际上并不重要(从javascript客户端传递给我的annoted类,最好是

我该怎么做?

我曾想过把它放进url,但之后我需要做一些其他的事情,而不是注释,这样就不会觉得太安全。

您可以将其作为标头传递,而暴露web套接字的Java tomcat端点必须读取标头并将其设置为端点配置的用户属性映射示例

公共类WsHandShakeInterceptor扩展了ServerEndpointConfig。配置程序{

@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
    super.modifyHandshake(sec, request, response);
    setUserHeadersAsProps(sec, request);
}
private void setUserHeadersAsProps(ServerEndpointConfig sec, HandshakeRequest request) {
    Map<String, List<String>> headers = request.getHeaders();
    if (headers != null) {
        List<String> userNameHeader = headers.get(HeadersConst.OIDC_CLAIM_USERNAME);
        if (userNameHeader != null && !userNameHeader.isEmpty()) {
            sec.getUserProperties().put(HeadersConst.X_FORWARDED_USER, userNameHeader.get(0));
        }
    }
}

}

最新更新