java如何获取本机IP地址
时间:2021-04-18 09:47:34|栏目:JAVA代码|点击: 次
本文实例为大家分享了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;
}
}


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




