1

Websocket API for Java GlassfishでリモートピアのIPアドレスを取得するにはどうすればよいですか?

4

3 に答える 3

2

別の質問に対するこの回答に基づく別の方法は、HandshakeRequest のヘッダーを取得することです。探しているヘッダーは、次のいずれかです。

origin: [IP Address]
x-forwarded-for: [Possibly a separate IP]

わかりやすくするために、ここに私のセットアップと、これをどのように発見したかを示します。

  • MyMachine:6060 の Wamp 2.5。これは、クライアントの HTML ページをホストします。
  • LabMachine:6060 (通常の接続) および LabMachine:6443 (安全な接続) の Wamp 2.5。これはプロキシとして機能します。
  • MyMachine:8080 (通常) および MyMachine:8181 (SSL) 上の GlassFish 4.0。これがエンドポイントです。

私は自分のマシン、ラボのマシン、同僚のマシンを介してクライアント ページに接続しました。いずれの場合も、WebSocket リクエストのオリジン ヘッダーは

http://マイマシン:6060

ただし、各ケースでx-forwarded-hostヘッダーは異なり、実際のクライアントの IP アドレスと一致していました。

于 2015-02-18T10:30:42.010 に答える
2

getRemoteAddr()を参照してください

標準の JSR-356 セッション インターフェイスを実装する TyrusSession に、ソケット セッション インスタンスをキャストする必要があります。

お使いのバージョンがこの方法をサポートしているかどうかわからないため、Tyrus をアップグレードする必要があるかもしれません。Tyrus 1.7を使用していますが、問題なく動作します。アップグレードの方法は次のとおりです。

于 2014-08-04T01:59:35.610 に答える
-2

WebSocketsHTTP リクエストに基づいています。HttpServletしたがって、おそらく anまたは a をどこかに拡張しているWebSocketServletので、 から IP を取得する通常の方法が機能するHttpServletRequestはずです。

例:

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);
    }

}
于 2013-02-01T11:50:58.040 に答える