Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息
1 引入jar包
<!--获取ip、浏览器类型--> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.20</version> </dependency>
2 代码

import eu.bitwalker.useragentutils.Browser; import eu.bitwalker.useragentutils.OperatingSystem; import eu.bitwalker.useragentutils.UserAgent; import eu.bitwalker.useragentutils.Version; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @ClassName : IpAndAddrUtil * @Date: 2020/12/24 9:58 * @Description : 获取请求IP地址、浏览器相关信息 */ public class IpAndAddrUtil { /** * @return java.lang.String * @Description: 获取发起请求的IP地址 * @Param [request] * @Date: 2020/12/24 10:03 **/ public static String getIp(HttpServletRequest request) { // 这个一般是Nginx反向代理设置的参数 String ip = request.getHeader("X-Real-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)) { 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.getRemoteAddr(); } // 本机访问 if ("localhost".equalsIgnoreCase(ip) || "127.0.0.1".equalsIgnoreCase(ip) || "0:0:0:0:0:0:0:1".equalsIgnoreCase(ip)){ // 根据网卡取本机配置的IP InetAddress inet; try { inet = InetAddress.getLocalHost(); ip = inet.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } } // 处理多IP的情况(只取第一个IP) if (ip != null && ip.contains(",")) { String[] ipArray = ip.split(","); ip = ipArray[0]; } return ip; } /** * @return java.lang.String * @Description: 获取发起请求的浏览器名称 * @Param [request] * @Date: 2020/12/24 10:03 **/ public static String getBrowserName(HttpServletRequest request) { String header = request.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(header); Browser browser = userAgent.getBrowser(); return browser.getName(); } /** * @return java.lang.String * @Description: 获取发起请求的浏览器版本号 * @Param [request] * @Date: 2020/12/24 10:03 **/ public static String getBrowserVersion(HttpServletRequest request) { String header = request.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(header); //获取浏览器信息 Browser browser = userAgent.getBrowser(); //获取浏览器版本号 Version version = browser.getVersion(header); return version.getVersion(); } /** * @return java.lang.String * @Description: 获取发起请求的操作系统名称 * @Param [request] * @Date: 2020/12/24 10:03 **/ public static String getOsName(HttpServletRequest request) { String header = request.getHeader("User-Agent"); UserAgent userAgent = UserAgent.parseUserAgentString(header); OperatingSystem operatingSystem = userAgent.getOperatingSystem(); return operatingSystem.getName(); } }
原文参考:https://www.cnblogs.com/qubo520/p/10970845.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?