【发布时间】:2013-01-16 16:00:16
【问题描述】:
如何在 Websocket API for Java Glassfish 中获取远程对等点的 IP 地址?
【问题讨论】:
标签: glassfish websocket ip-address
如何在 Websocket API for Java Glassfish 中获取远程对等点的 IP 地址?
【问题讨论】:
标签: glassfish websocket ip-address
您需要将您的套接字会话实例转换为 TyrusSession,它实现了标准 JSR-356 会话接口。
您可能需要升级 Tyrus,因为我不确定您的版本是否支持此方法。我正在使用Tyrus 1.7,它对我来说很好用。这里是how to upgrade。
【讨论】:
另外一个方法,基于this answer到另一个问题,就是获取HandshakeRequest的headers。您要查找的标头是以下任一。
origin: [IP Address]
x-forwarded-for: [Possibly a separate IP]
为了清楚起见,这是我的设置,以及我是如何发现的:
我通过自己的机器、实验室机器和同事的机器连接到客户端页面。在每种情况下,WebSocket 请求的原始标头都是
但是,在每种情况下,x-forwarded-host 标头都不同,与实际客户端的 IP 地址相匹配。
【讨论】:
WebSockets 基于 HTTP 请求。因此,您可能在某处扩展了HttpServlet 或WebSocketServlet,因此从HttpServletRequest 获取IP 的常用方法应该可行:
例子:
public class WebSocketsServlet extends HttpServlet {
private final WebSocketApplication app = new WebSocketApplication();
@Override
public void init(ServletConfig config) throws ServletException {
WebSocketEngine.getEngine().register(
config.getServletContext().getContextPath() + "/context", app);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("IP: " + req.getRemoteAddr());
super.doGet(req, resp);
}
}
【讨论】: