当前位置: 首页 > java >正文

学习和测试WebApi项目限制客户端ip访问接口(基于中间件)

  WebApi项目需要限制仅允许有限的客户端访问接口,百度相关内容,网上很多介绍WebApi接口IP限流的文章,稍微调整就能用于限制IP访问,微软官网中也有文章介绍客户端 IP 安全列表(参考文献1),可以通过中间件、过滤器等多种方式实现IP访问限制,本文学习和测试基于中间件实现WebApi接口限制客户端ip访问的基本用法。
  基于中间件做IP限制,需要自定义中间件类,每次客户端访问前都会调用该中间件,从中间件中获取客户端访问IP并判断是否在指定的IP集合中,在的话允许访问接口,否则直接返回错误信息。
  自定义中间件类的代码及其在program.cs文件中的使用方式如下所示:

// 自定义中间件类
public class IpFilterMiddleware
{private readonly RequestDelegate _next;private readonly string[] _allowedIps;public IpFilterMiddleware(RequestDelegate next, IConfiguration config){_next = next;_allowedIps = config.GetSection("AllowedIps").Get<string>().Split(','); }public async Task Invoke(HttpContext context){var clientIp = context.Connection.RemoteIpAddress?.ToString();if (_allowedIps.Contains(clientIp)){await _next(context); }else{context.Response.StatusCode = 403; // 返回403 Forbidden状态码await context.Response.WriteAsync("客户端IP禁止访问WebApi接口"); }}
}//使用中间件类
var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseMiddleware<IpFilterMiddleware>();//使用中间件类app.UseWebSockets();

  实现上面的代码后,客户端调用WebApi接口时即在IpFilterMiddleware中进行IP过滤,禁止访问的效果如下图所示:
在这里插入图片描述

参考文献:
[1]https://learn.microsoft.com/zh-cn/aspnet/core/security/ip-safelist?view=aspnetcore-9.0
[2]https://blog.csdn.net/sd7o95o/article/details/145102403

http://www.xdnf.cn/news/5392.html

相关文章:

  • Python httpx库终极指南
  • 端口号被占用怎么解决
  • 《Effective Python》第1章 Pythonic 思维详解——深入理解 Python 条件表达式(Conditional Expressions)
  • JAVA EE_网络原理_网络层
  • PowerShell 脚本中文乱码处理
  • 《Linux命令行大全(第2版)》PDF下载
  • TAPIP3D:持久3D几何中跟踪任意点
  • Java--图书管理系统(简易版优化)
  • Oracle — 内置函数
  • Python Bug 修复案例分析:多线程数据竞争引发的bug 两种修复方法
  • Java多态详解
  • 图形学、人机交互、VR/AR领域文献速读【持续更新中...】
  • TypeScript 类型保护详解
  • 《Go小技巧易错点100例》第三十一篇
  • stm32week15
  • 轻量服务器与宝塔
  • 【递归、搜索与回溯算法】导论
  • 2025第九届御网杯网络安全大赛线上赛 区域赛WP (MISC和Crypto)(详解-思路-脚本)
  • [Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)
  • Java反序列化漏洞
  • 第一章 初识Java
  • Kotlin Multiplatform--03:项目实战
  • 机器学习总结
  • C/C++实践(四)C++跨平台开发的系统性挑战与深度解决方案
  • 基于SpringBoot的小区停车位管理系统
  • 集合(1)
  • MATLAB中矩阵和数组的区别
  • Python-Venv多环境管理
  • JavaEE--文件操作和IO
  • cookie和session的区别