当前位置: 首页 > wzjs >正文

现在较为常用的网站开发技术第一营销网

现在较为常用的网站开发技术,第一营销网,济南校园兼职网站建设,销售网站建设推广文章目录 基于Spring MVC的客户端真实IP获取方案解析概述核心方法解析代码实现工作流程 IP获取优先级策略IP有效性验证异常处理与日志使用场景注意事项扩展建议 基于Spring MVC的客户端真实IP获取方案解析 概述 在Web应用开发中,准确获取客户端真实IP地址是常见的…

文章目录

  • 基于Spring MVC的客户端真实IP获取方案解析
    • 概述
    • 核心方法解析
      • 代码实现
      • 工作流程
    • IP获取优先级策略
    • IP有效性验证
    • 异常处理与日志
    • 使用场景
    • 注意事项
    • 扩展建议

基于Spring MVC的客户端真实IP获取方案解析

概述

在Web应用开发中,准确获取客户端真实IP地址是常见的需求。本文介绍一个基于Spring MVC实现的客户端IP获取方案ClientIpController,该方案支持多种代理场景下的IP识别,并包含完善的校验机制。

核心方法解析

代码实现

/*** 获取客户端公网IP** @author xdr630*/
@RestController
public class ClientIpController {private static final Logger LOGGER = LoggerFactory.getLogger(KocaClientIpController.class);@GetMapping("/getRemoteIp")@ResponseBodypublic String getClientIp(HttpServletRequest request) {String clientIp = null;try {String xForwardedFor = request.getHeader("X-Forwarded-For");if (xForwardedFor != null && !xForwardedFor.isEmpty() && !"unknown".equalsIgnoreCase(xForwardedFor)) {// X-Forwarded-For:Squid 服务代理,X-Forwarded-For 可能包含多个 IP,取第一个非空的 IPclientIp = xForwardedFor.split(",")[0].trim();}if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {// Proxy-Client-IP:apache 服务代理clientIp = request.getHeader("Proxy-Client-IP");}if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {// WL-Proxy-Client-IP:weblogic 服务代理clientIp = request.getHeader("WL-Proxy-Client-IP");}if ((clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp))) {// X-Real-IP:nginx服务代理clientIp = request.getHeader("X-Real-IP");}if (clientIp == null || clientIp.isEmpty() || "unknown".equalsIgnoreCase(clientIp)) {clientIp = request.getRemoteAddr();}if (clientIp != null && !clientIp.isEmpty()) {clientIp = clientIp.split(",")[0];}if (!isValidIPv4(clientIp)) {LOGGER.warn("无效的客户端 IP: {}", clientIp);// 在浏览器端显示返回nullclientIp = "null";}} catch (Exception e) {LOGGER.error("获取客户端公网IP失败", e);throw new RuntimeException(e);}return clientIp;}private boolean isValidIPv4(String ip) {String ipv4Regex = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";return Pattern.compile(ipv4Regex).matcher(ip).matches();}
}

工作流程

  1. 多级代理支持:依次检查以下请求头

    • X-Forwarded-For:处理Squid等代理的逗号分隔IP
    • Proxy-Client-IP:Apache代理
    • WL-Proxy-Client-IP:WebLogic代理
    • X-Real-IP:Nginx代理
  2. 最终回退机制

clientIp = request.getRemoteAddr();
  1. 结果处理
    • 取首个有效IP段
    • IPv4格式校验
    • 异常IP返回"null"字符串

IP获取优先级策略

优先级Header名称代理类型
1X-Forwarded-For通用代理/Squid
2Proxy-Client-IPApache
3WL-Proxy-Client-IPWebLogic
4X-Real-IPNginx
5getRemoteAddr()直接连接

IP有效性验证

采用正则表达式校验IPv4格式:

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

异常处理与日志

  • WARN级别日志:记录无效IP格式
  • ERROR级别日志:捕获处理异常
  • 异常转换:将检查异常转为RuntimeException

使用场景

  1. 反向代理架构下的真实IP获取
  2. 客户端地理位置服务
  3. 访问频率控制
  4. 安全审计日志

注意事项

  1. 代理链中的首个IP可能不可信(需结合安全策略)
  2. 不支持IPv6地址(需扩展正则校验)
  3. 生产环境建议添加速率限制
  4. 重要场景建议结合XFF白名单验证

扩展建议

  1. 增加IPv6支持
  2. 添加可信代理IP列表验证
  3. 集成缓存机制防止滥用
  4. 补充单元测试覆盖边界情况

该方案提供了可靠的客户端IP获取实现,开发人员应根据实际网络架构调整header的检查顺序,并在安全敏感场景中补充额外的验证逻辑。

http://www.dtcms.com/wzjs/151963.html

相关文章:

  • wordpress文章引入代码山西seo优化
  • 手机网站怎么做单页面苏州网站建设公司
  • 营销型网站建设推荐乐云seo泉州百度seo公司
  • 沈阳教做网站个人做seo怎么赚钱
  • 正规设计兼职网站有哪些爱站工具
  • 配置wordpressseo推广学院
  • 上海专业网站建设排行免费发布广告信息的网站
  • 大型的PC网站适合vue做吗怎么做网站宣传
  • 网站排名查询软件磁力云搜索引擎入口
  • 宁波正规网站建设方式百度指数对比
  • 有那些专门做职业统计的网站网页制作培训教程
  • 移动网站开发工具拼多多代运营一般多少钱
  • 湛江企业建站程序成品网站建站空间
  • 深圳市建设主管部门门户网站做网站用什么编程软件
  • 为什么需要网站开发seo百度网站排名软件
  • 网络宣传推广策划范文seo研究院
  • 做热区的网站收录优美图片app
  • 沈阳公司建设网站互联网行业都有哪些工作
  • 网站规划怎么做百度一下你就知道首页
  • 国家建设执业注册中心网站seo外链软件
  • 诸暨做网站广告的电话seo的最终是为了达到
  • 做oa系统的网站好项目推荐平台
  • 绿色网站模板手机导航下载2022新版
  • 广告设计与制作专业就业方向个人seo外包
  • 高端产品网站友情链接交易网站
  • 做网站需要投入多少钱seo外链优化策略
  • 网站动图怎么做最好的推广平台是什么软件
  • 网站做建筑三维图百度商业平台官网
  • 运城哪家做网站的公司好企业网站seo公司
  • 个人网站做公司网站制作网页的流程步骤