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(){
SetipList=newHashSet<>();
try{
EnumerationallNetInterfaces=NetworkInterface.getNetworkInterfaces();
InetAddressip=null;
while(allNetInterfaces.hasMoreElements()){
NetworkInterfacenetInterface=(NetworkInterface)allNetInterfaces.nextElement();
//排除虚拟接口和没有启动运行的接口
if(netInterface.isVirtual()||!netInterface.isUp()){
continue;
}else{
Enumerationaddresses=netInterface.getInetAddresses();
while(addresses.hasMoreElements()){
ip=addresses.nextElement();
if(ip!=null&&(ipinstanceofInet4Address||ipinstanceofInet6Address)){
ipList.add(ip.getHostAddress());
}
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
returnipList;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。