【发布时间】:2018-08-25 10:21:39
【问题描述】:
简单的任务。我正在使用jetty的websockets服务器实现,我必须获取客户端IP地址,但我不知道如何。
【问题讨论】:
简单的任务。我正在使用jetty的websockets服务器实现,我必须获取客户端IP地址,但我不知道如何。
【问题讨论】:
我觉得还是和以前一样,像这样从HTTPServletRequest#getRemoteAddr()获取IP:
public class WSServlet extends WebSocketServlet {
...
...
@Override
public WebSocket doWebSocketConnect(HttpServletRequest req, String str) {
System.out.println("IP: "+ req.getRemoteAddr());
...
}
}
【讨论】:
如果您使用org.eclipse.jetty.websocket.api.Session,我会选择:
session.getRemoteAddress().getAddress().getHostAddress();
【讨论】:
没有 WebServletSocket:
public static String getClientIp(Session session) {
String ip = session.getUserProperties().get("javax.websocket.endpoint.remoteAddress").toString();
int i1 = ip.indexOf("/");
int i2 = ip.indexOf(":");
return ip.substring(i1 + 1, i2);
}
【讨论】:
如果您需要它进行身份验证,您可以这样获取:
这只是一个例子:
@Override
public boolean canPublish(BayeuxServer server, ServerSession client,
ServerChannel channel, ServerMessage messsage) {
//
BayeuxContext context=server.getContext();
System.out.println(context.getRemoteAddress());
return true;
}
请记住,getRemoteAddress 返回一个 InetSocketAddress 字符串。所以你也有端口,看起来像这样:
/79.111.111.22:49372
【讨论】: