Java はどのようにしてクライアント ホストの実際の IP アドレスを取得しますか

プロジェクトの開発中に、システム プロジェクトを特定のホストの IP アドレスにバインドして、システムを特定のホストでのみ使用できるようにする必要がありました。理由は聞かないでください。これは初めてのことです。 「このような奇妙な要求を目にしました。もちろん、なぜアクセス許可コントロールを使用しないのかは聞かないでください。現在のアクセス許可コントロール コンポーネントはより良く開発されています。解決します。この問題を解決するにはどうすればよいですか?」私の最初の考えはこうでした

まず、フロントエンドページでJqueryを使用してクライアントのIPアドレスを取得できるかどうかを確認しますが、残念ながら編集者がさまざまな方法を試しましたが、解決する方法はありません。時間が経つと、取得した情報は実行できないか、取得されたのは 127.0.0.1 であり、エディターも非常に無力であるため、Jquery フロントエンドで IP アドレスを取得するという考えは現実的に放棄されました

次に、編集者の考えが変わり、バックグラウンドの開発が非常に成熟したので、クライアント ホストの IP アドレスを取得するという目標を達成するために、バックエンドに関連する Java コードを使用できるかどうかを見てみましょう。小さいですが、苦労は報われ、歩き回った結果がついに結果をもたらしました。編集者にインターネット上の実際の IP アドレスを取得する方法を見つけてもらいます。コードは次のとおりです。

public Result  getHostIp(HttpServletRequest request){
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            //获取代理中中的ip
            ip = request.getHeader("PRoxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            //获取代理中中的ip

            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            //非代理的情况获取ip
            ip = request.getRemoteAddr();
        }

        if (ip!=null&&!"".equals(ip)){
            return new Result(true,"查询ip成功",ip);
        }else{
            return new Result(false,"查询ip失败");
        }

    }

そうです、上記のコード文字列はエディターにメソッドが提供されており、このコード文字列をクラス内で実行できますが、次のコードを使用する過程で 0:0 が返されることもありました: 0:0:0:0:0 :1、なぜですか? 編集者はこのページにアクセスしたときにプロジェクト サーバーと同じコンピューターを使用していたので、得られた結果は次のとおりです。

編集者が他のホストを使用して Web サイトにアクセスすると、正しい IP アドレスが取得され、目的が達成されます。

 

 

おすすめ

転載: blog.csdn.net/weixin_50249953/article/details/128616947