簡體   English   中英

碼頭8-websockets:如何獲取客戶端IP地址?

[英]jetty 8 - websockets : how do I get the client IP address?

簡單的任務。 我正在通過碼頭使用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();

如果出於身份驗證目的需要它,則可以這樣獲得:

這只是一個例子:

@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

如果沒有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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM