gpt4 book ai didi

java - 在 Websocket session 中访问 UserAgent?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:13 25 4
gpt4 key购买 nike

使用 Java 的“JSR 356 - Java API for WebSocket”的 Tyrus 引用实现,我找不到访问用于 Websocket 升级的 HTTP 连接的方法。因此,我无法访问浏览器发送的 HTTP header 。

有没有办法读取 HTTP UserAgent header ?

将“Session”对象转换为“TyrusSession”或类似对象是可以接受的,无论如何我都必须这样做才能获得远程地址。在 Websocket 连接中再次发送 UserAgent 作为消息将是我的后备解决方案。

最佳答案

警告:ServerEndpointConfig 在所有端点实例之间共享,并且可以同时完成多个升级请求!查看评论!

端点获取配置器:

import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value = "/foo", configurator = MyServerEndpointConfigurator.class)
public class MyEndpoint {

@OnOpen
public void onOpen(Session session, EndpointConfig endpointConfig) throws Exception {
String ip = ((TyrusSession) session).getRemoteAddr();
String userAgent = (String) endpointConfig.getUserProperties().get("user-agent");
...
}
}

配置器看起来像这样:

import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;

public class MyServerEndpointConfigurator extends ServerEndpointConfig.Configurator {

@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
if (request.getHeaders().containsKey("user-agent")) {
sec.getUserProperties().put("user-agent", request.getHeaders().get("user-agent").get(0)); // lower-case!
}
}
}

关于java - 在 Websocket session 中访问 UserAgent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28939581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com