Browse Source

feat: 登陆代理

master_tdsql
hxh 9 months ago
parent
commit
13dd3d822d
  1. 38
      shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java
  2. 1
      shuili-admin/src/main/resources/config/application-dev.yml
  3. 422
      shuili-common/src/main/java/com/shuili/common/utils/ip/IpUtils.java

38
shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java

File diff suppressed because one or more lines are too long

1
shuili-admin/src/main/resources/config/application-dev.yml

@ -171,6 +171,7 @@ ignored:
/chunk/*, /chunk/*,
/error, /error,
/login, /login,
/login-proxy,
/captchaImage, /captchaImage,
/system/file/**, /system/file/**,
/system/user/exportExcel, /system/user/exportExcel,

422
shuili-common/src/main/java/com/shuili/common/utils/ip/IpUtils.java

@ -14,217 +14,219 @@ import java.util.regex.Pattern;
/** /**
* 获取IP方法 * 获取IP方法
* *
* @author shuili * @author shuili
*/ */
public class IpUtils { public class IpUtils {
public static String getIpAddr(HttpServletRequest request) { public final static String UNKNOWN = "unknown";
if (request == null) {
return "unknown"; public static String getIpAddr(HttpServletRequest request) {
} if (request == null) {
String ip = request.getHeader("x-forwarded-for"); return UNKNOWN;
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { }
ip = request.getHeader("Proxy-Client-IP"); String ip = request.getHeader("x-forwarded-for");
} if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP");
ip = request.getHeader("X-Forwarded-For"); }
} if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Forwarded-For");
ip = request.getHeader("WL-Proxy-Client-IP"); }
} if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP");
ip = request.getHeader("X-Real-IP"); }
} if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { }
ip = request.getRemoteAddr();
} if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip); ip = request.getRemoteAddr();
} }
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip);
public static boolean internalIp(String ip) { }
byte[] addr = textToNumericFormatV4(ip);
return internalIp(addr) || "127.0.0.1".equals(ip); 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) { }
if (StringUtils.isNull(addr) || addr.length < 2) {
return true; private static boolean internalIp(byte[] addr) {
} if (StringUtils.isNull(addr) || addr.length < 2) {
final byte b0 = addr[0]; return true;
final byte b1 = addr[1]; }
// 10.x.x.x/8 final byte b0 = addr[0];
final byte SECTION_1 = 0x0A; final byte b1 = addr[1];
// 172.16.x.x/12 // 10.x.x.x/8
final byte SECTION_2 = (byte) 0xAC; final byte SECTION_1 = 0x0A;
final byte SECTION_3 = (byte) 0x10; // 172.16.x.x/12
final byte SECTION_4 = (byte) 0x1F; final byte SECTION_2 = (byte) 0xAC;
// 192.168.x.x/16 final byte SECTION_3 = (byte) 0x10;
final byte SECTION_5 = (byte) 0xC0; final byte SECTION_4 = (byte) 0x1F;
final byte SECTION_6 = (byte) 0xA8; // 192.168.x.x/16
switch (b0) { final byte SECTION_5 = (byte) 0xC0;
case SECTION_1: final byte SECTION_6 = (byte) 0xA8;
return true; switch (b0) {
case SECTION_2: case SECTION_1:
if (b1 >= SECTION_3 && b1 <= SECTION_4) { return true;
return true; case SECTION_2:
} if (b1 >= SECTION_3 && b1 <= SECTION_4) {
case SECTION_5: return true;
switch (b1) { }
case SECTION_6: case SECTION_5:
return true; switch (b1) {
} case SECTION_6:
default: return true;
return false; }
} default:
} return false;
}
/** }
* 将IPv4地址转换成字节
* /**
* @param text IPv4地址 * 将IPv4地址转换成字节
* @return byte 字节 *
*/ * @param text IPv4地址
public static byte[] textToNumericFormatV4(String text) { * @return byte 字节
if (text.length() == 0) { */
return null; public static byte[] textToNumericFormatV4(String text) {
} if (text.length() == 0) {
return null;
byte[] bytes = new byte[4]; }
String[] elements = text.split("\\.", -1);
try { byte[] bytes = new byte[4];
long l; String[] elements = text.split("\\.", -1);
int i; try {
switch (elements.length) { long l;
case 1: int i;
l = Long.parseLong(elements[0]); switch (elements.length) {
if ((l < 0L) || (l > 4294967295L)) { case 1:
return null; l = Long.parseLong(elements[0]);
} if ((l < 0L) || (l > 4294967295L)) {
bytes[0] = (byte) (int) (l >> 24 & 0xFF); return null;
bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); }
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); bytes[0] = (byte) (int) (l >> 24 & 0xFF);
bytes[3] = (byte) (int) (l & 0xFF); bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
break; bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
case 2: bytes[3] = (byte) (int) (l & 0xFF);
l = Integer.parseInt(elements[0]); break;
if ((l < 0L) || (l > 255L)) { case 2:
return null; l = Integer.parseInt(elements[0]);
} if ((l < 0L) || (l > 255L)) {
bytes[0] = (byte) (int) (l & 0xFF); return null;
l = Integer.parseInt(elements[1]); }
if ((l < 0L) || (l > 16777215L)) { bytes[0] = (byte) (int) (l & 0xFF);
return null; l = Integer.parseInt(elements[1]);
} if ((l < 0L) || (l > 16777215L)) {
bytes[1] = (byte) (int) (l >> 16 & 0xFF); return null;
bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); }
bytes[3] = (byte) (int) (l & 0xFF); bytes[1] = (byte) (int) (l >> 16 & 0xFF);
break; bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
case 3: bytes[3] = (byte) (int) (l & 0xFF);
for (i = 0; i < 2; ++i) { break;
l = Integer.parseInt(elements[i]); case 3:
if ((l < 0L) || (l > 255L)) { for (i = 0; i < 2; ++i) {
return null; l = Integer.parseInt(elements[i]);
} if ((l < 0L) || (l > 255L)) {
bytes[i] = (byte) (int) (l & 0xFF); return null;
} }
l = Integer.parseInt(elements[2]); bytes[i] = (byte) (int) (l & 0xFF);
if ((l < 0L) || (l > 65535L)) { }
return null; l = Integer.parseInt(elements[2]);
} if ((l < 0L) || (l > 65535L)) {
bytes[2] = (byte) (int) (l >> 8 & 0xFF); return null;
bytes[3] = (byte) (int) (l & 0xFF); }
break; bytes[2] = (byte) (int) (l >> 8 & 0xFF);
case 4: bytes[3] = (byte) (int) (l & 0xFF);
for (i = 0; i < 4; ++i) { break;
l = Integer.parseInt(elements[i]); case 4:
if ((l < 0L) || (l > 255L)) { for (i = 0; i < 4; ++i) {
return null; l = Integer.parseInt(elements[i]);
} if ((l < 0L) || (l > 255L)) {
bytes[i] = (byte) (int) (l & 0xFF); return null;
} }
break; bytes[i] = (byte) (int) (l & 0xFF);
default: }
return null; break;
} default:
} catch (NumberFormatException e) { return null;
return null; }
} } catch (NumberFormatException e) {
return bytes; return null;
} }
return bytes;
public static String getMacByIp(String ip) { }
String macAddr = null;
try { public static String getMacByIp(String ip) {
Process process = Runtime.getRuntime().exec("nbtstat -a " + ip); String macAddr = null;
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); try {
Pattern pattern = Pattern.compile("([A-F0-9]{2}-){5}[A-F0-9]{2}"); Process process = Runtime.getRuntime().exec("nbtstat -a " + ip);
Matcher matcher; BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
for (String strLine = br.readLine(); strLine != null; strLine = br.readLine()) { Pattern pattern = Pattern.compile("([A-F0-9]{2}-){5}[A-F0-9]{2}");
matcher = pattern.matcher(strLine); Matcher matcher;
if (matcher.find()) { for (String strLine = br.readLine(); strLine != null; strLine = br.readLine()) {
macAddr = matcher.group(); matcher = pattern.matcher(strLine);
break; if (matcher.find()) {
} macAddr = matcher.group();
} break;
} catch (IOException e) { }
e.printStackTrace(); }
} } catch (IOException e) {
System.out.println(macAddr); e.printStackTrace();
return macAddr; }
} System.out.println(macAddr);
return macAddr;
public static String getHostIp() { }
try {
return InetAddress.getLocalHost().getHostAddress(); public static String getHostIp() {
} catch (UnknownHostException e) { try {
} return InetAddress.getLocalHost().getHostAddress();
return "127.0.0.1"; } catch (UnknownHostException e) {
} }
return "127.0.0.1";
public static String getHostName() { }
try {
return InetAddress.getLocalHost().getHostName(); public static String getHostName() {
} catch (UnknownHostException e) { try {
} return InetAddress.getLocalHost().getHostName();
return "未知"; } catch (UnknownHostException e) {
} }
return "未知";
/* }
* 验证IP是否属于某个IP段
* /*
* ipSection IP段'-'分隔 ip 所验证的IP号码 * 验证IP是否属于某个IP段
* *
*/ * ipSection IP段'-'分隔 ip 所验证的IP号码
*
public static boolean ipExistsInRange(String ip, String ipStrat, String ipEnd) { */
ip = ip.trim();
String beginIP = ipStrat.trim(); public static boolean ipExistsInRange(String ip, String ipStrat, String ipEnd) {
String endIP = ipEnd.trim(); ip = ip.trim();
return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP); String beginIP = ipStrat.trim();
String endIP = ipEnd.trim();
} return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP);
public static long getIp2long(String ip) { }
ip = ip.trim();
String[] ips = ip.split("\\."); public static long getIp2long(String ip) {
long ip2long = 0L; ip = ip.trim();
for (int i = 0; i < 4; ++i) { String[] ips = ip.split("\\.");
ip2long = ip2long << 8 | Integer.parseInt(ips[i]); long ip2long = 0L;
} for (int i = 0; i < 4; ++i) {
return ip2long; ip2long = ip2long << 8 | Integer.parseInt(ips[i]);
}
} return ip2long;
public static long getIp2long2(String ip) { }
ip = ip.trim();
String[] ips = ip.split("\\."); public static long getIp2long2(String ip) {
long ip1 = Integer.parseInt(ips[0]); ip = ip.trim();
long ip2 = Integer.parseInt(ips[1]); String[] ips = ip.split("\\.");
long ip3 = Integer.parseInt(ips[2]); long ip1 = Integer.parseInt(ips[0]);
long ip4 = Integer.parseInt(ips[3]); long ip2 = Integer.parseInt(ips[1]);
long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4; long ip3 = Integer.parseInt(ips[2]);
return ip2long; long ip4 = Integer.parseInt(ips[3]);
long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;
} return ip2long;
}
} }
Loading…
Cancel
Save