java如何获取本机IP地址
本文实例为大家分享了java实现获取本机IP地址的具体代码,供大家参考,具体内容如下
原因:同一台机子上开着两个web工程,现在有需求需要保证两个项目之间交互的安全问题。因为有个旧的项目,所以尽量不做改动。只能在新项目中做改动。
处理办法:获取本地的IP地址,有请求进来时查看请求的来源,只有来源是本地IP的才予以通过。
代码如下:
/** *任务调度调用拦截器 */ publicclassTaskControlInterceptorimplementsInterceptor{ //存放本机IP地址列表(包括ipv4和ipv6) privatestaticSetlocalHostList=newHashSet<>(); @Override publicvoidintercept(Invocationinv){ Controllercontroller=inv.getController(); HttpServletRequestrequest=controller.getRequest(); /* 获取本机的IP地址列表 请求的时候判断来源IP地址是否在该列表中,如果不在的话则不予通过 */ if(localHostList.size()==0){ localHostList=getIpAddress(); } if(StringUtils.isNotBlank(request.getRemoteAddr())){ if(!localHostList.contains(request.getRemoteAddr())){ Resultresult=newResult(newError("450","非法的请求,请求来源IP地址不是本机")); controller.getResponse().setStatus(450); controller.renderJson(result); return; } }else{ Resultresult=newResult(newError("450","非法的请求,请求来源IP地址为空")); controller.getResponse().setStatus(450); controller.renderJson(result); return; } inv.invoke(); } /** *获取本机的IP地址(包括ipv4和ipv6) *
包含回环地址127.0.0.1和0:0:0:0:0:0:0:1 */ privatestaticSetgetIpAddress(){ Set ipList=newHashSet<>(); try{ Enumeration allNetInterfaces=NetworkInterface.getNetworkInterfaces(); InetAddressip=null; while(allNetInterfaces.hasMoreElements()){ NetworkInterfacenetInterface=(NetworkInterface)allNetInterfaces.nextElement(); //排除虚拟接口和没有启动运行的接口 if(netInterface.isVirtual()||!netInterface.isUp()){ continue; }else{ Enumeration addresses=netInterface.getInetAddresses(); while(addresses.hasMoreElements()){ ip=addresses.nextElement(); if(ip!=null&&(ipinstanceofInet4Address||ipinstanceofInet6Address)){ ipList.add(ip.getHostAddress()); } } } } }catch(Exceptione){ e.printStackTrace(); } returnipList; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。