java如何獲取本機(jī)IP地址
本文實(shí)例為大家分享了java實(shí)現(xiàn)獲取本機(jī)IP地址的具體代碼,供大家參考,具體內(nèi)容如下
原因:同一臺機(jī)子上開著兩個web工程,現(xiàn)在有需求需要保證兩個項(xiàng)目之間交互的安全問題。因?yàn)橛袀€舊的項(xiàng)目,所以盡量不做改動。只能在新項(xiàng)目中做改動。
處理辦法:獲取本地的IP地址,有請求進(jìn)來時查看請求的來源,只有來源是本地IP的才予以通過。
代碼如下:
/** * 任務(wù)調(diào)度調(diào)用攔截器 */ public class TaskControlInterceptor implements Interceptor { //存放本機(jī)IP地址列表(包括ipv4和ipv6) private static Set<String> localHostList = new HashSet<>(); @Override public void intercept(Invocation inv) { Controller controller = inv.getController(); HttpServletRequest request = controller.getRequest(); /* 獲取本機(jī)的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地址不是本機(jī)")); 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(); } /** * 獲取本機(jī)的IP地址(包括ipv4和ipv6) * <br>包含回環(huán)地址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(); //排除虛擬接口和沒有啟動運(yùn)行的接口 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; } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java 實(shí)戰(zhàn)范例之精美網(wǎng)上音樂平臺的實(shí)現(xiàn)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實(shí)現(xiàn)一個前后端分離的精美網(wǎng)上音樂平臺,大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11IDEA 使用mybatis插件Free Mybatis plugin的步驟(推薦)
這篇文章主要介紹了IDEA 使用mybatis插件Free Mybatis plugin的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Springboot之@ConfigurationProperties注解解讀
在Spring Boot中,@EnableConfigurationProperties注解的主要作用是激活@ConfigurationProperties注解的配置屬性類,從而讓配置屬性類能被Spring容器管理,這樣的話,我們就可以在屬性類中輕松地使用@ConfigurationProperties來綁定配置文件中的屬性2024-10-10java高并發(fā)寫入用戶信息到數(shù)據(jù)庫的幾種方法
本文主要介紹了java高并發(fā)寫入用戶信息到數(shù)據(jù)庫的幾種方法,具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03java判斷某個點(diǎn)是否在所畫多邊形/圓形內(nèi)
這篇文章主要為大家詳細(xì)介紹了java判斷某個點(diǎn)是否在所畫多邊形或圓形內(nèi)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05淺談mybatis 樂觀鎖實(shí)現(xiàn),解決并發(fā)問題
這篇文章主要介紹了淺談mybatis 樂觀鎖實(shí)現(xiàn),解決并發(fā)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08