From 7d0e057762e196f95a70c003b3c5bdeec561911b Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 16 Oct 2018 20:21:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E7=BD=91=E4=B8=8D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/templates/monitor/job/add.html | 2 +- .../com/ruoyi/common/utils/AddressUtils.java | 8 +- .../java/com/ruoyi/common/utils/IpUtils.java | 127 +++++++++++++++--- .../manager/factory/AsyncFactory.java | 16 +-- sql/ry_20181008.sql | 6 +- 5 files changed, 122 insertions(+), 37 deletions(-) diff --git a/ruoyi-admin/src/main/resources/templates/monitor/job/add.html b/ruoyi-admin/src/main/resources/templates/monitor/job/add.html index 426cc04b..8e860b95 100644 --- a/ruoyi-admin/src/main/resources/templates/monitor/job/add.html +++ b/ruoyi-admin/src/main/resources/templates/monitor/job/add.html @@ -38,7 +38,7 @@
- +
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java index 67d72bd0..437137de 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java @@ -20,7 +20,13 @@ public class AddressUtils public static String getRealAddressByIP(String ip) { - String address = "address disabled"; + String address = "XX XX"; + + // 内网不查询 + if (IpUtils.internalIp(ip)) + { + return "内网IP"; + } if (Global.isAddressEnabled()) { String rspStr = HttpUtils.sendPost(IP_URL, "ip=" + ip); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java index 80010314..0e15e46e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java @@ -1,7 +1,5 @@ package com.ruoyi.common.utils; -import sun.net.util.IPAddressUtil; - import javax.servlet.http.HttpServletRequest; /** @@ -9,65 +7,152 @@ import javax.servlet.http.HttpServletRequest; * * @author ruoyi */ -public class IpUtils { - public static String getIpAddr(HttpServletRequest request) { - if (request == null) { +public class IpUtils +{ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { return "unknown"; } String ip = request.getHeader("x-forwarded-for"); - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { ip = request.getHeader("Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { ip = request.getHeader("X-Forwarded-For"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { ip = request.getHeader("WL-Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { ip = request.getHeader("X-Real-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { ip = request.getRemoteAddr(); } return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } - - public static boolean internalIp(String ip) { - byte[] addr = IPAddressUtil.textToNumericFormatV4(ip); - return internalIp(addr); + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); } - private static boolean internalIp(byte[] addr) { + private static boolean internalIp(byte[] addr) + { final byte b0 = addr[0]; final byte b1 = addr[1]; - //10.x.x.x/8 + // 10.x.x.x/8 final byte SECTION_1 = 0x0A; - //172.16.x.x/12 + // 172.16.x.x/12 final byte SECTION_2 = (byte) 0xAC; final byte SECTION_3 = (byte) 0x10; final byte SECTION_4 = (byte) 0x1F; - //192.168.x.x/16 + // 192.168.x.x/16 final byte SECTION_5 = (byte) 0xC0; final byte SECTION_6 = (byte) 0xA8; - switch (b0) { + switch (b0) + { case SECTION_1: return true; case SECTION_2: - if (b1 >= SECTION_3 && b1 <= SECTION_4) { + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { return true; } case SECTION_5: - switch (b1) { + switch (b1) + { case SECTION_6: return true; } default: return false; } + } + /** + * 将IPv4地址转换成字节 + * + * @param IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + return null; + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + return null; + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + return null; + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; } } \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java index ac2e4dc0..4542e84f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -1,8 +1,10 @@ package com.ruoyi.framework.manager.factory; +import java.util.TimerTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.AddressUtils; -import com.ruoyi.common.utils.IpUtils; import com.ruoyi.framework.shiro.session.OnlineSession; import com.ruoyi.framework.util.LogUtils; import com.ruoyi.framework.util.ServletUtils; @@ -15,10 +17,6 @@ import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.system.service.impl.SysLogininforServiceImpl; import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl; import eu.bitwalker.useragentutils.UserAgent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.TimerTask; /** * 异步工厂(产生任务用) @@ -74,12 +72,8 @@ public class AsyncFactory @Override public void run() { - if (IpUtils.internalIp(operLog.getOperIp())) { - operLog.setOperLocation("内网IP"); - } else { - // 远程查询操作地点 - operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); - } + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); } }; diff --git a/sql/ry_20181008.sql b/sql/ry_20181008.sql index 783c0339..a0baf66b 100644 --- a/sql/ry_20181008.sql +++ b/sql/ry_20181008.sql @@ -562,7 +562,7 @@ create table sys_job ( method_name varchar(500) default '' comment '任务方法', method_params varchar(200) default '' comment '方法参数', cron_expression varchar(255) default '' comment 'cron执行表达式', - misfire_policy varchar(20) default '0' comment '计划执行错误策略(0默认 1继续 2等待 3放弃)', + misfire_policy varchar(20) default '1' comment '计划执行错误策略(1继续 2等待 3放弃)', status char(1) default '0' comment '状态(0正常 1暂停)', create_by varchar(64) default '' comment '创建者', create_time datetime comment '创建时间', @@ -572,8 +572,8 @@ create table sys_job ( primary key (job_id, job_name, job_group) ) engine=innodb auto_increment=100 default charset=utf8 comment = '定时任务调度表'; -insert into sys_job values(1, 'ryTask', '系统默认(无参)', 'ryNoParams', '', '0/10 * * * * ?', '0', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', ''); -insert into sys_job values(2, 'ryTask', '系统默认(有参)', 'ryParams', 'ry', '0/20 * * * * ?', '0', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', ''); +insert into sys_job values(1, 'ryTask', '系统默认(无参)', 'ryNoParams', '', '0/10 * * * * ?', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', ''); +insert into sys_job values(2, 'ryTask', '系统默认(有参)', 'ryParams', 'ry', '0/20 * * * * ?', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', ''); -- ----------------------------