mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:13:26 +08:00
【新增】新增客户端IP限流模块。
This commit is contained in:
42
CoreCms.Net.Core/Config/IpPolicyRateLimitSetup.cs
Normal file
42
CoreCms.Net.Core/Config/IpPolicyRateLimitSetup.cs
Normal 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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.2.0" />
|
||||
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.1" />
|
||||
<PackageReference Include="Castle.Core" Version="4.4.1" />
|
||||
|
||||
Reference in New Issue
Block a user