我有这个函数可以从我在 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;
}
错误:
调试: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) 在 org.encuestame.mvc.controller.TweetPollController.detailTweetPollController(TweetPollController.java:332) 在 org.encuestame.mvc.controller.TweetPollController$$FastClassByCGLIB$$$6990b004.invoke() 在 net.sf .cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) 在 org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedIntercepto
我知道 iPv6 localhost 格式应该是 '0:0:0:0:0:0:0:1' 但我的请求总是返回这个字符串 '0:0:0:0:0:0:0:1%0 '
任何人都可以帮助我吗?