21xrx.com
2025-03-21 14:01:50 Friday
文章检索 我的文章 写文章
Java如何获取请求头信息?
2023-06-15 20:55:15 深夜i     --     --
Java 请求头信息 getRemoteAddr() X-Forwarded-For User-Agent Referer

在Java Web开发中,获取请求头信息是非常常见和重要的操作。在HTTP协议中,请求头信息包含了客户端的请求信息,如浏览器的类型、请求的页面地址,是否从缓存中获取等。通过获取请求头信息,我们可以方便的进行用户安全校验、网站性能优化等操作,因此,本文将介绍Java如何获取请求头信息的方法。

获取客户端IP地址

在Java中,获取客户端IP地址最常用的方法是通过HttpServletRequest的getRemoteAddr()方法,示例代码如下:

String ip = request.getRemoteAddr();

需要注意的是,当客户端通过代理访问时,该方法获取的并不是客户端的真实IP地址,而是代理服务器的IP地址。此时,我们需要从请求头中获取X-Forwarded-For的值,以获取客户端的真实IP地址。示例代码如下:

String ip = request.getHeader("X-Forwarded-For");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
  ip = ip.split(",")[0];
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
  ip = request.getRemoteAddr();
}
return ip;

获取浏览器信息

通过HttpServletRequest的getHeader方法,我们可以获取请求头中的User-Agent字段,从而获取浏览器的相关信息,例如浏览器的名称、型号、操作系统等。示例代码如下:

String userAgent = request.getHeader("User-Agent");
if (StringUtils.isNotBlank(userAgent)) {
  UserAgentInfo userAgentInfo = UserAgentUtils.getUserAgentInfo(userAgent);
  logger.debug("浏览器名称:{}", userAgentInfo.getBrowserName());
  logger.debug("浏览器型号:{}", userAgentInfo.getBrowserVersion());
  logger.debug("操作系统名称:{}", userAgentInfo.getOsName());
  logger.debug("移动终端型号:{}", userAgentInfo.getMobileDevice());
}

获取请求的Referer

在Web开发中,Referer(即来源页)是非常重要的信息,通常用于判断用户是从哪个页面跳转过来的。通过HttpServletRequest的getHeader方法,我们可以方便的获取请求头中的Referer字段,示例代码如下:

String referer = request.getHeader("referer");
if (StringUtils.isNotBlank(referer)) {
  logger.debug("请求来源:{}", referer);
}

以上便是获取请求头信息的常用方法,可以方便的帮助我们实现一些Web开发中的常见需求,例如用户访问统计、防盗链等。希望本文可以帮助大家更好的进行Java Web开发!

  
  

评论区