【新增】新增客户端IP限流模块。

This commit is contained in:
JianWeie
2022-05-20 14:48:06 +08:00
parent 05e2ff05bb
commit f973854d98
9 changed files with 228 additions and 1 deletions

View File

@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AspNetCoreRateLimit;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace CoreCms.Net.Core.Config
{
/// <summary>
/// IPLimit限流 启动服务
/// </summary>
public static class IpPolicyRateLimitSetup
{
public static void AddIpPolicyRateLimitSetup(this IServiceCollection services, IConfiguration Configuration)
{
if (services == null) throw new ArgumentNullException(nameof(services));
// 需要将限制规则存储到高速内存中
services.AddMemoryCache();
// 载入配置文件的规则设置
services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
// 注入计数器和规则存储
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
// 注入计数器和规则分布式缓存存储(根据需求自行扩展)
//services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>();
//services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
// 用于解析上下文的注入
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// 配置(解析器、计数器密钥生成器)
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
}
}
}