瀏覽代碼

优化客户端 IP 获取逻辑并修改依赖注入方式

在 ClientIpFilterAttribute.cs 文件中:
- 新增从请求头中获取客户端 IP 的逻辑,依次尝试从 X-Forwarded-For、X-Real-IP 和 RemoteIpAddress 中获取 IP 地址。
- 如果获取到的 IP 地址为空,则记录警告日志并返回 403 禁止访问的状态码。

在 StartupExtensions.cs 文件中:
- 将 ClientIpFilterAttribute 的依赖注入方式从 AddScoped 改为 AddSingleton。
xf 2 周之前
父節點
當前提交
cd8a4b954f
共有 2 個文件被更改,包括 7 次插入1 次删除
  1. 6 0
      src/Hotline.Api/Filter/ClientIpFilterAttribute.cs
  2. 1 1
      src/Hotline.Api/StartupExtensions.cs

+ 6 - 0
src/Hotline.Api/Filter/ClientIpFilterAttribute.cs

@@ -24,6 +24,12 @@ namespace Hotline.Api.Filter
             //    context.HttpContext.Items["ClientIp"] = ip;
             //}
             var ip = context.HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
+            if(string.IsNullOrEmpty(ip))
+                ip = context.HttpContext.Request.Headers["X-Real-IP"].FirstOrDefault();
+
+            if (string.IsNullOrEmpty(ip))
+                ip = context.HttpContext.Connection.RemoteIpAddress?.ToString();
+
             if (string.IsNullOrEmpty(ip))
             {
                 _logger.LogWarning("Forbidden Request from IP: {RemoteIp}", ip);

+ 1 - 1
src/Hotline.Api/StartupExtensions.cs

@@ -227,7 +227,7 @@ internal static class StartupExtensions
 
         services.AddScoped<IGuiderSystemService, TiqnQueService>();
 
-        services.AddScoped<ClientIpFilterAttribute>(sp =>
+        services.AddSingleton<ClientIpFilterAttribute>(sp =>
         {
             var loggerFactory = sp.GetService<ILoggerFactory>();
             var logger = loggerFactory.CreateLogger<ClientIpFilterAttribute>();