diff --git a/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java b/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java new file mode 100644 index 00000000..34f67a3f --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java @@ -0,0 +1,83 @@ +package com.example.api.utils; + +import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest接口,用于获取HTTP请求信息 + +/** + * 浏览器工具类,提供获取浏览器版本信息的方法。 + */ +public class BrowserUtil { + + /** + * 获取浏览器版本信息。 + * @param request HTTP请求对象,用于获取请求头中的User-Agent信息 + * @return 浏览器名称和版本的字符串表示 + */ + public static String getBrower(HttpServletRequest request) { + String browserVersion = null; // 用于存储浏览器版本信息 + String header = request.getHeader("User-Agent"); // 从请求头中获取User-Agent信息 + if (header.equals("") || header == null) { // 如果User-Agent信息为空或null,默认为谷歌浏览器 + browserVersion = "谷歌浏览器"; + return browserVersion; + } + + // 根据User-Agent信息判断浏览器类型 + if (header.indexOf("Chrome") > 0) { // 谷歌浏览器 + browserVersion = "Chrome"; + } else if (header.indexOf("Safari") > 0) { // Safari浏览器 + browserVersion = "safari浏览器"; + } + if (header.indexOf("MSIE") > 0) { // IE浏览器 + browserVersion = "IE浏览器"; + } + if (header.indexOf("Firefox") > 0) { // 火狐浏览器 + browserVersion = "火狐浏览器"; + } + if (header.indexOf("Camino") > 0) { // Camino浏览器 + browserVersion = "camino浏览器"; + } + if (header.indexOf("Konqueror") > 0) { // Konqueror浏览器 + browserVersion = "konqueror浏览器"; + } + if (header.indexOf("Quark") > 0) { // 夸克浏览器 + browserVersion = "quark浏览器"; + } + if (header.indexOf("baidu") > 0) { // 百度浏览器 + browserVersion = "百度浏览器"; + } + if (header.indexOf("Edge") > 0) { // Edge浏览器 + browserVersion = "edge"; + } + if (header.indexOf("TheWorld") > 0) { // TheWorld浏览器 + browserVersion = "theworld浏览器"; + } + if (header.indexOf("QQBrowser") > 0 || header.indexOf("TencentTraveler") > 0 || header.indexOf("QQTheme") > 0) { // QQ浏览器 + browserVersion = "qq浏览器"; + } + if (header.indexOf("Avast") > 0) { // Avast Secure Browser浏览器 + browserVersion = "avast浏览器"; + } + if (header.indexOf("OPR") > 0) { // Opera浏览器 + browserVersion = "opera浏览器"; + } + if (header.indexOf("360") > 0) { // 360浏览器 + browserVersion = "360浏览器"; + } + if (header.indexOf("LBBROWSER") > 0) { // 猎豹浏览器 + browserVersion = "猎豹浏览器"; + } + if (header.indexOf("Maxthon") > 0) { // 遨游浏览器 + browserVersion = "遨游浏览器"; + } + if (header.indexOf("MetaSr") > 0 || header.indexOf("Sogou") > 0) { // 搜狗浏览器 + browserVersion = "搜狗浏览器"; + } + if (header.indexOf("UCWEB") > 0 || header.indexOf("UCBrowser") > 0) { // UC浏览器 + browserVersion = "uc浏览器"; + } + if (browserVersion == null) { // 没找到的都默认为谷歌浏览器 + browserVersion = "谷歌浏览器"; + } + System.out.println(browserVersion); // 打印浏览器版本信息 + return browserVersion; // 返回浏览器版本信息 + } +} diff --git a/IDEA/src/main/java/com/example/api/utils/IpUtil.java b/IDEA/src/main/java/com/example/api/utils/IpUtil.java new file mode 100644 index 00000000..b119ef15 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/IpUtil.java @@ -0,0 +1,41 @@ +package com.example.api.utils; + +import javax.servlet.http.HttpServletRequest; + +public class IpUtil { + + private static final String LOOPBACK_ADDRESS = "127.0.0.1"; + private static final String IPV6_ADDRESS = "0:0:0:0:0:0:0:1"; + + /** + * 通过HttpServletRequest返回客户端真实IP地址(通过多级代理后也能获取到真实ip) + */ + public static String getIpAddr(HttpServletRequest request) { + try { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-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)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + //如果使用localhost访问,对于windows IPv6会返回0:0:0:0:0:0:0:1,将其转为127.0.0.1 + if (IPV6_ADDRESS.equals(ip)) { + ip = LOOPBACK_ADDRESS; + } + return ip; + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +}