1. 程式人生 > 程式設計 >java如何獲取本機IP地址

java如何獲取本機IP地址

本文例項為大家分享了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;
  }

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。