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

云南网站制作一条龙手机端网页模板免费

云南网站制作一条龙,手机端网页模板免费,天津网站建设培训学校,网站建设需要什么设备前言当需要在生产环境中提供 Swagger UI 时#xff0c;我们可以通过身份验证#xff0c;控制只有授权用户才能访问 Swagger UI 页面。但是我们希望更进一步#xff0c;每个用户只能看到授权给他的终结点#xff0c;而不会暴露其他未授权终结点信息。比如#xff0c; API 提…前言当需要在生产环境中提供 Swagger UI 时我们可以通过身份验证控制只有授权用户才能访问 Swagger UI 页面。但是我们希望更进一步每个用户只能看到授权给他的终结点而不会暴露其他未授权终结点信息。比如 API 提供了方法 A 和 方法 B而对于用户 zhangsan 来说他在 Swagger UI 页面只能看到方法 A 的说明而不会知道方法 B 的存在。思路Swagger UI 页面展示的数据来源其实是/swagger/v1/swagger.json文件app.UseSwaggerUI(c  c.SwaggerEndpoint(/swagger/v1/swagger.json, WebApplication1 v1));而swagger.json的格式是遵循 OpenAPI 规范的。其中paths定义了 API 的所有终结点那么只需要保证swagger.json包含的paths仅定义了授权接口的终结点即可。虽然我们不能控制swagger.json文件的生成但是我们可以控制它如何输出到响应啊我们可以定义一个Middleware实现如下功能判断当前请求是否swagger.json如果是截获原始响应即swagger.json文件内容创建一个新的 json 文件遍历swagger.json所有 JSON 结点写入到新 json 文件中如果当前节点是paths节点下的子节点先判断子节点名称是否是授权终结点是则写入否则跳过将新 json 文件输出到响应中实现SwaggerEndpointsFilterMiddleware实现代码如下public class SwaggerEndpointsFilterMiddleware {private readonly RequestDelegate _next;public SwaggerEndpointsFilterMiddleware(RequestDelegate next){_next  next;}public async Task Invoke(HttpContext httpContext){if (httpContext.Request.Path.Value ! null  httpContext.Request.Path.HasValue httpContext.Request.Path.Value.Contains(swagger.json, StringComparison.InvariantCultureIgnoreCase)){var originalStream  httpContext.Response.Body;using (var memoryStream  new MemoryStream()){//截获原始响应将响应内容写入 MemoryStreamhttpContext.Response.Body  memoryStream;await _next(httpContext);//获取当前用户可访问的 Endpointsvar validEndpoints  GetValidEndpoints(httpContext.Request);memoryStream.Position  0;using (var sr  new StreamReader(memoryStream)){//将修改过的 json 写入响应 await originalStream.WriteAsync(CreateSwaggerJson(sr.ReadToEnd(), validEndpoints));}httpContext.Response.Body  originalStream;return;}}await _next(httpContext);} }关键代码在CreateSwaggerJson:private byte[] CreateSwaggerJson(string json, IEnumerablestring validEndpoints) {using (var memoryStream  new MemoryStream()){using (var utf8JsonWriter  new Utf8JsonWriter(memoryStream)){using (var jsonDocument  JsonDocument.Parse(json)){utf8JsonWriter.WriteStartObject();foreach (var element in jsonDocument.RootElement.EnumerateObject()){if (element.Name  paths){utf8JsonWriter.WritePropertyName(element.Name);utf8JsonWriter.WriteStartObject();//遍历 paths 子节点检查 Endpoint 是否已授权foreach (var endpoint in element.Value.EnumerateObject()){if (validEndpoints.Contains(endpoint.Name)){endpoint.WriteTo(utf8JsonWriter);}}utf8JsonWriter.WriteEndObject();}else{element.WriteTo(utf8JsonWriter);}}utf8JsonWriter.WriteEndObject();}}return memoryStream.ToArray();} }最后修改 Startup.cs:app.UseMiddlewareSwaggerEndpointsFilterMiddleware();app.UseSwagger(); app.UseSwaggerUI(c  c.SwaggerEndpoint(/swagger/v1/swagger.json, WebApplication1 v1));结论今天我们通过 Middleware 拦截swagger.json的输出实现了 Swagger UI 仅为用户暴露已授权终结点。添加微信号【MyIO666】邀你加入技术交流群
http://www.pierceye.com/news/428344/

相关文章:

  • 澄海网站建设用asp做网站怎么美观
  • 未满18岁能申请网站备案吗网站做qq链接
  • 网络公司网站开发互联网技术专业学什么
  • 校园网站建设详细的设计方案php网站开发实战
  • 网站设计广州量计价格网站可信度建设
  • 门业网站 源码做企业网站必须要座机吗
  • 广东网站开发推荐wordpress快速加载
  • php网站开发外包北京网站建设迈程网络
  • 微信开发者平台取消授权seo资源网站排名
  • 将网站源码下载下来如何使用网站seo链接购买
  • 可信网站认证必须做苏州那里可以建网站
  • 手机网站底部代码有名的网站建设
  • 做一个网站需要多长时间网站制作有哪些种类
  • 做微信推送的网站小刘网站建设
  • 18款禁用软件app网站入口台州网站推广排名
  • 网站的服务内容济南网站制作方案
  • 微网站模板 phpwordpress 支付宝
  • wordpress dux主题破解安装全屏网站 图片优化
  • 一键建站公司做网站 怎么做留言
  • 制作的网站西安网页设计培训哪里有
  • 株洲市住房和城乡建设局门户网站中国建设银行官网站大同
  • 北京响应式网站制作公司wordpress邀请码注册
  • 衡阳网站开发有哪些公司怎么建设淘客自己的网站、
  • 国内扁平化网站欣赏什么站做咨询网站好
  • 评价校园网站建设范例wordpress插件获取数据库
  • 网站开发具体问题重庆装修公司排名前十名
  • 萝卜建站织梦网站采集如何做
  • 邢台在百度上做个网站河南营销网站建设联系方式
  • 电力建设科学技术进步申报网站教学工作总结
  • 做淘宝客必须建网站吗杭州网站优化效果