您好,登錄后才能下訂單哦!
本文實例為大家分享了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; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。