Skip to content

Commit 42062f5

Browse files
committed
fix: 优化真实IP中间件注入方式
1 parent 4031593 commit 42062f5

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

framework/src/Bing.AspNetCore/Bing/AspNetCore/Extensions/Extensions.ApplicationBuilder.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.AspNetCore.Builder;
55
using Microsoft.AspNetCore.Hosting;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Options;
78

89
namespace Bing.AspNetCore.Extensions
910
{
@@ -22,7 +23,13 @@ public static class BingApplicationBuilderExtensions
2223
/// 注册真实IP中间件
2324
/// </summary>
2425
/// <param name="builder">应用程序生成器</param>
25-
public static IApplicationBuilder UseRealIp(this IApplicationBuilder builder) => builder.UseMiddleware<RealIpMiddleware>();
26+
/// <param name="setupAct">配置操作</param>
27+
public static IApplicationBuilder UseRealIp(this IApplicationBuilder builder, Action<RealIpOptions> setupAct = null)
28+
{
29+
var options = new RealIpOptions { HeaderKey = "x-forwarded-for" };
30+
setupAct?.Invoke(options);
31+
return builder.UseMiddleware<RealIpMiddleware>(Options.Create(options));
32+
}
2633

2734
/// <summary>
2835
/// 注册真实IP

framework/src/Bing.AspNetCore/Bing/AspNetCore/RealIp/RealIpMiddleware.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
using System;
22
using System.Net;
33
using System.Threading.Tasks;
4-
using Bing.Logs;
54
using Microsoft.AspNetCore.Builder;
65
using Microsoft.AspNetCore.Hosting;
76
using Microsoft.AspNetCore.Http;
7+
using Microsoft.Extensions.Logging;
88
using Microsoft.Extensions.Options;
99

1010
namespace Bing.AspNetCore.RealIp
@@ -24,15 +24,22 @@ public class RealIpMiddleware : IMiddleware
2424
/// </summary>
2525
private readonly RealIpOptions _options;
2626

27+
/// <summary>
28+
/// 日志
29+
/// </summary>
30+
private readonly ILogger<RealIpMiddleware> _logger;
31+
2732
/// <summary>
2833
/// 初始化一个<see cref="RealIpMiddleware"/>类型的实例
2934
/// </summary>
3035
/// <param name="next">方法</param>
3136
/// <param name="options">真实IP选项</param>
32-
public RealIpMiddleware(RequestDelegate next, IOptions<RealIpOptions> options)
37+
/// <param name="logger">日志</param>
38+
public RealIpMiddleware(RequestDelegate next, IOptions<RealIpOptions> options, ILogger<RealIpMiddleware> logger)
3339
{
3440
_next = next;
3541
_options = options.Value;
42+
_logger = logger;
3643
}
3744

3845
/// <summary>
@@ -47,33 +54,17 @@ public async Task InvokeAsync(HttpContext context)
4754
if (headers.ContainsKey(_options.HeaderKey))
4855
{
4956
context.Connection.RemoteIpAddress = IPAddress.Parse(
50-
_options.HeaderKey.Equals("x-forwarded-for",StringComparison.CurrentCultureIgnoreCase)
57+
_options.HeaderKey.Equals("x-forwarded-for", StringComparison.CurrentCultureIgnoreCase)
5158
? headers["X-Forwarded-For"].ToString().Split(',')[0]
5259
: headers[_options.HeaderKey].ToString());
53-
54-
WriteLog(context, context.Connection.RemoteIpAddress);
60+
_logger.LogDebug($"解析真实IP成功: {context.Connection.RemoteIpAddress}");
5561
}
5662
}
5763
finally
5864
{
5965
await _next(context);
6066
}
6167
}
62-
63-
/// <summary>
64-
/// 写入日志
65-
/// </summary>
66-
/// <param name="context">Http上下文</param>
67-
/// <param name="address">IP地址</param>
68-
private void WriteLog(HttpContext context, IPAddress address)
69-
{
70-
if (context == null)
71-
return;
72-
var log = Log.GetLog(this)
73-
.Caption("真实IP中间件");
74-
log.Content($"解析真实IP成功 : {address}")
75-
.Debug();
76-
}
7768
}
7869

7970
/// <summary>

modules/admin/src/Bing.Admin/Modules/AppModule.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Text;
33
using AspectCore.Configuration;
44
using Bing.AspNetCore;
5+
using Bing.AspNetCore.Extensions;
56
using Bing.AspNetCore.Mvc.ExceptionHandling;
67
using Bing.AspNetCore.Mvc.Filters;
78
using Bing.Core.Modularity;
@@ -75,6 +76,7 @@ public override void UseModule(IApplicationBuilder app)
7576
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
7677
app.UseCorrelationId();
7778
app.UseBingExceptionHandling();
79+
app.UseRealIp(x => x.HeaderKey = "test");
7880
// 初始化Http上下文访问器
7981
Web.HttpContextAccessor = app.ApplicationServices.GetService<IHttpContextAccessor>();
8082
app.UseAuthentication();

0 commit comments

Comments
 (0)