温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java如何获取本机IP地址

发布时间:2020-09-27 07:13:26 来源:脚本之家 阅读:231 作者:暴走地水牛 栏目:编程语言

本文实例为大家分享了java实现获取本机IP地址的具体代码,供大家参考,具体内容如下

原因:同一台机子上开着两个web工程,现在有需求需要保证两个项目之间交互的安全问题。因为有个旧的项目,所以尽量不做改动。只能在新项目中做改动。

处理办法:获取本地的IP地址,有请求进来时查看请求的来源,只有来源是本地IP的才予以通过。

代码如下:

 /**
 * 任务调度调用拦截器
 */
public class TaskControlInterceptor implements Interceptor {

  //存放本机IP地址列表(包括ipv4和ipv6)
  private static Set<String> localHostList = new HashSet<>();

  @Override
  public void intercept(Invocation inv) {
   Controller controller = inv.getController();
   HttpServletRequest request = controller.getRequest();
   /*
   获取本机的IP地址列表
   请求的时候判断来源IP地址是否在该列表中,如果不在的话则不予通过
    */
   if (localHostList.size() == 0) {
     localHostList = getIpAddress();
   }
   if (StringUtils.isNotBlank(request.getRemoteAddr())) {
     if (!localHostList.contains(request.getRemoteAddr())) {
      Result result = new Result(new Error("450","非法的请求,请求来源IP地址不是本机"));
      controller.getResponse().setStatus(450);
      controller.renderJson(result);
      return;
     }
   } else {
     Result result = new Result(new Error("450","非法的请求,请求来源IP地址为空"));
     controller.getResponse().setStatus(450);
     controller.renderJson(result);
     return;
   }
   inv.invoke();
  }

  /**
  * 获取本机的IP地址(包括ipv4和ipv6)
  * <br>包含回环地址127.0.0.1和0:0:0:0:0:0:0:1
  */
  private static Set<String> getIpAddress() {
   Set<String> ipList = new HashSet<>();
   try {
     Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
     InetAddress ip = null;
     while (allNetInterfaces.hasMoreElements()) {
      NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
      //排除虚拟接口和没有启动运行的接口
      if (netInterface.isVirtual() || !netInterface.isUp()) {
        continue;
      } else {
        Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
        while (addresses.hasMoreElements()) {
         ip = addresses.nextElement();
         if (ip != null && (ip instanceof Inet4Address || ip instanceof Inet6Address)) {
           ipList.add(ip.getHostAddress());
         }
        }
      }
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
   return ipList;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI