0

Javaのリクエスト(HttpServletRequest)からHostAddressを取得するこの関数があります。しかし、Jetty 7.x を使用していて、私の IP は ipV6 であり、常に iPv6 アドレスでこのエラーが発生します。

私の機能:

xxxx.getIP(request, false);

public static String getIP(HttpServletRequest request, boolean proxy) {
    String ip = "";
    log.debug("X-getHeaderNames ["+ request.getHeaderNames()+"]");
    if (proxy) {
        ip = XFordwardedInetAddressUtil.getAddressFromRequest(request);
    } else {
        String _ip = request.getRemoteAddr();
        ip = InetAddresses.forString(_ip).getHostAddress();
    }
    return ip;
}

エラー:

DEBUG: org.encuestame.core.exception.EnMeMappingExceptionResolver - ハンドラー [org.encuestame.mvc.controller.TweetPollController@4fc23996] からの例外の解決: java.lang.IllegalArgumentException: '0:0:0:0:0:0:0 :1%0'は IP 文字列リテラルではありません。java.lang.IllegalArgumentException: '0:0:0:0:0:0:0:1%0'IP 文字列リテラルではありません。org.encuestame.utils.net.InetAddresses.forString(InetAddresses.java:59) で org.encuestame.core.util.EnMeUtils.getIP(EnMeUtils.java:210) で org.encuestame.mvc.controller.AbstractBaseOperations.getIpClient で(AbstractBaseOperations.java:262) at org.encuestame.mvc.controller.TweetPollController.detailTweetPollController(TweetPollController.java:332) at org.encuestame.mvc.controller.TweetPollController$$FastClassByCGLIB$$6990b004.invoke() at net.sf org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedIntercepto の .cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)

iPv6 localhost 形式は '0:0:0:0:0:0:0:1' である必要があることはわかっていますが、私のリクエストは常にこの文字列 '0:0:0:0:0:0:0:1%0' を返します。 '

誰でも私を助けることができますか?

4

2 に答える 2

3

問題は、使用しているクラス ( org.encuestame.utils.net.InetAddresses) が明らかに IPv6 をサポートしていないことです。Joachim が回答で言及した Java InetAddressクラスを使用してみてください。

于 2012-10-06T12:40:08.637 に答える
2

リンク ローカル アドレス%を使用している場合は、アドレスに を含める必要があります

これは、コンピューターが正しいインターフェイスに応答できるようにするには、要求がどのインターフェイス/ゾーンから来たかを知る必要があるためです。

正しく構成された、インターネットでルーティング可能な IPv6 アドレスを使用している場合、ゾーン インデックスはアドレスの一部ではありません。

この場合、localhost/link ローカル テストの問題を解決する方法がわかりません。ただし、%記号の後にあるものを除外するか、リンク ローカル アドレスを処理する別のクラスを使用してアドレスを解析する以外は方法がありません。

編集:これは、以前に見たことのない別の同様の質問です。

于 2012-10-06T12:33:40.497 に答える