我需要将一些参数从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));
}
}
}
}