背景

在使用ABP vNext时,当需要记录审计日志时,我们按照https://docs.abp.io/zh-Hans/abp/latest/Audit-Logging配置即可开箱即用,然而在实际生产环境中,某些配置并不可取,比如今天的主角——客户端IP,记录用户操作当下真实的客户端IP,对于系统安全审计非常重要,ABP也提供了默认的获取客户端IP的方法,但是在实际项目中我们需要定制化一些参数,才能满足我们的需求。

ABP vNext默认获取客户端IP

源码如下(Volo.Abp.AspNetCore.WebClientInfo.HttpContextWebClientInfoProvider.cs)

红线圈出来的方法,便是默认获取客户端IP的行为,看到这里,应该有所感悟,此种写法是如:不考虑Nginx配置等的做法,而实际项目部署环境中,我们时常有Nginx对请求进行转发,应用程序也部署在容器里面,此时若按此方法获取IP,定然会出现错误,如下截图获取的客户端IP便是错误的

如不对其进行重写,如:::ffff:10.0.1.77、::1等这些并非来自真实的客户端IP而是运行环境相关机器的IP就会被记录,因为请求由它们一层层转发而来

重写方法

根据自己的环境配置(X-Forwarded-For),将代码重写为如下(重写代码大伙应该都知道,那如何替换现有实现代码?参考另一篇:IOC替换原有Service实现):

protected virtual string GetClientIpAddress()
{try{var httpContext = HttpContextAccessor.HttpContext;var headers = httpContext?.Request?.Headers;if (headers != null && headers.ContainsKey("X-Forwarded-For")){httpContext.Connection.RemoteIpAddress = IPAddress.Parse(headers["X-Forwarded-For"].FirstOrDefault().ToString());}return httpContext?.Connection?.RemoteIpAddress?.ToString();}catch (Exception ex){Logger.LogException(ex, LogLevel.Warning);return null;}
}

效果


如上已正常

ABP vNext 审计日志获取真实客户端IP相关推荐

  1. Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  2. 学习笔记 - Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  3. nginx curl命令有效 curl_setopt无效_日志分析系列(外传一):Nginx透过代理获取真实客户端IP...

    本系列中的故事纯属虚构,如有雷同实属巧合 小B是Q公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了Q公司的应用系统架构是:Client --> ...

  4. Nginx透过代理获取真实客户端IP

    本系列中的故事纯属虚构,如有雷同实属巧合 小B是'柒'公司的安全攻城狮,为了完成任务小B开始做起了调研(欲知背景如何,且听下回分说). 首先小B弄明白了'柒'公司的应用系统架构是:Client --& ...

  5. php获取真实客户端IP方法

    可能有时候简单地通过php自带的$_SERVER获取的IP参数并不能满足我们的需求,则需要我们自定义一个获取IP的方法,通过学习ECSHOP的源码,我们可以把获取IP的方法封装如下: <?php ...

  6. 服务器获取真实客户端 IP

    0x01 先查个问题 测试环境微信支付通道提示网络环境未能通过安全验证,请稍后再试,出现这种情况一般首要 想到可能是双方网络交互中微信方验参与我们出现不一致,翻了下手册确定是这类问题开始排查环节 可能 ...

  7. java获取f5服务器真实ip,F5服务器做负载均衡时WebService获取真实客户端IP地址

    首先,我先来介绍一下什么是F5服务器,内容来自百度: 负载均衡,英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡.分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器. ...

  8. 网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址?

    网站配置了Cloudflare代理后,如何配置Nginx获取的真实客户端IP地址? 这是一个很简单的问题,如何在后台获取真实的访问者IP地址? 网站为了避免有些不怀好意的访问者,不得不自动分析一下客户 ...

  9. apache关于记录真实客户端ip和不记录健康检查日志

    由于负载均衡会转发客户端的请求到web服务器,所以web服务往往记录的是负载均衡的IP,现在可以通过下面的配置,让apache记录真实客户端IP 语法 #LogFormat  "\" ...

最新文章

  1. 5.2 FIR滤波器的卷积(脉冲响应、频率响应,幅频响应,暂态-搞不清楚的有救了啊)
  2. html5调用系统声音1s响一次_记录一次系统性能调优过程
  3. 响应式开发中合理选定CSS媒体查询分割点
  4. 开源硬件基金是如何运作的_如何在没有任何风险投资资金的情况下通过开源硬件赚钱
  5. Java中private、protected、public和default的区别
  6. (108)FPGA面试题-介绍STA静态时序分析及其作用
  7. php 微信支付退款接口开发,微信支付退款功能开发
  8. B-TrunC标准加入ITU集群国际标准
  9. HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)
  10. vasp和ms_科学网—小谈CASTEP(Linux), MS-CASTEP, VASP软件区别 - 张召富的博文
  11. java生成word带多级标题,word自动生成多级标题的方法
  12. laravel-admin固定表头
  13. SLIC超像素算法学习笔记
  14. ARM开发板开机自启
  15. 美国弗吉尼亚大学计算机科学,2017美国弗吉尼亚大学计算机科学专业
  16. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】
  17. 2021海南安全员考试及(安全员)模拟考试答案解析
  18. 股指IF,6月1日行情预测
  19. Delphi2010 MD5加密的方法
  20. adb shell下使用命令行删除android系统中指定文件和文件夹

热门文章

  1. python之实现从ftp下载文件到本地
  2. wampServer配置WWW根目录遇到的坑
  3. jQuery实现登录提示
  4. 【模拟】【codeforces】599B Spongebob and Joke
  5. Android下强制打开软键盘
  6. SharePoint Timer Job
  7. LNK2005 连接错误解决办法
  8. [轉]数据挖掘工具的选择
  9. 微软文本检索_如何在Microsoft Word中引用其他文档中的文本
  10. nest 架构_当有人打来您的Nest Hello时,如何让Google Home通知您