回到目录

LindDotNetCore中间件

大叔认识中间件就是主要对http请求进行拦截,然后添加具体个性化功能的逻辑,这种把请求切开,添加新逻辑的方式一般称为面向方面的逻辑AOP!

  1. 授权中间件
  2. 请求链跟踪中间件
  3. 响应时间中间件

授权中间件

请求有效性的校验

  • 授权参数
  1. /// <summary>
  2. /// 授权配置
  3. /// </summary>
  4. public class AuthorizationConfig
  5. {
  6. /// <summary>
  7. /// 统一密钥
  8. /// </summary>
  9. public string EncryptKey { get; set; }
  10. /// <summary>
  11. /// 过期时间秒数
  12. /// </summary>
  13. public int ExpiredSecond { get; set; }
  14. /// <summary>
  15. /// 被授权的app
  16. /// </summary>
  17. public string[] AppList { get; set; }
  18. }
  • 客户端请求参数
  1. /// <summary>
  2. /// 从http请求发过来的授权实体
  3. /// </summary>
  4. public class AuthorizationRequestInfo
  5. {
  6. public string ApplicationId { get; set; }
  7. public string Timestamp { get; set; }
  8. public string Sinature { get; set; }
  9. }
  • 请求拦截器,处理请求有效性,对app,过期时间,加密方式进行校验
  1. string computeSinature = MD5($"{requestInfo.ApplicationId}-{requestInfo.Timestamp}-{_options.EncryptKey}");
  2. double tmpTimestamp;
  3. if (computeSinature.Equals(requestInfo.Sinature) &&
  4. double.TryParse(requestInfo.Timestamp, out tmpTimestamp))
  5. {
  6. if (ValidateExpired(tmpTimestamp, _options.ExpiredSecond))
  7. {
  8. await ReturnTimeOut(context);
  9. }
  10. else
  11. {
  12. await ValidateApp(context, requestInfo.ApplicationId);
  13. }
  14. }
  15. else
  16. {
  17. await ReturnNotAuthorized(context);
  18. }
  • 为开发人员提供友好的扩展方法,用来注册中间件
  1. /// <summary>
  2. /// 注册授权服务-step1
  3. /// </summary>
  4. /// <param name="services">The <see cref="IServiceCollection"/> for adding services.</param>
  5. /// <param name="configureOptions">A delegate to configure the <see cref="ResponseCompressionOptions"/>.</param>
  6. /// <returns></returns>
  7. public static IServiceCollection AddLindAuthrization(this IServiceCollection services, Action<AuthorizationConfig> configureOptions = null)
  8. {
  9. if (services == null)
  10. {
  11. throw new ArgumentNullException(nameof(services));
  12. }
  13. var options = new AuthorizationConfig();
  14. configureOptions?.Invoke(options);
  15. ObjectMapper.MapperTo(options, ConfigFileHelper.Get<AuthorizationConfig>());
  16. services.AddSingleton(options);
  17. return services;
  18. }
  19. /// <summary>
  20. /// 使用授权中间件-step2
  21. /// </summary>
  22. /// <param name="builder"></param>
  23. /// <param name="options"></param>
  24. /// <returns></returns>
  25. public static IApplicationBuilder UseLindAuthrization(this IApplicationBuilder builder)
  26. {
  27. if (builder == null)
  28. {
  29. throw new ArgumentNullException(nameof(builder));
  30. }
  31. var options = builder.ApplicationServices.GetService<AuthorizationConfig>();
  32. return builder.UseMiddleware<AuthorizationMiddleware>(options);
  33. }
  • 使用授权中间件Startup中注册
  1. // 注册服务
  2. services.AddLindAuthrization(options =>
  3. {
  4. options.EncryptKey = "abc123";
  5. options.ExpiredSecond = 50;
  6. options.AppList = new string[] { "1", "2", "3" };
  7. });
  8. // 注册中间件 
  9. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  10. {
  11. if (env.IsDevelopment())
  12. {
  13. app.UseDeveloperExceptionPage();
  14. }
  15. app.UseLindAuthrization();
  16. app.UseMvc();
  17. }

请求链跟踪中间件

记录请求经过的整个过程,对于多api相互调用的场景比较有用

响应时间中间件

记录大于指定时间的请求信息,方便做性能整体的提升

回到目录

LindDotNetCore~授权中间件的介绍的更多相关文章

  1. SQL Server授权购买简单介绍

    SQL Server授权购买简单介绍 之前有同事问我,使用盗版序列号的SQL Server到底有没有性能限制,之前本人一直没有深入研究过,后来经过一番资料搜集和查证,汇总成这篇文章 微软的SQL Se ...

  2. Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块

    目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...

  3. 深度解读.NET5 授权中间件执行策略

    前文提要 2021.1月份我写了一个<这难道不是.NET5 的bug? 在线求锤?>, 讲述了我在实现[全局授权访问+特例匿名访问] 遇到的技术困惑: [特例匿名访问,还是走了认证流程]. ...

  4. 高性能分布式应用开发中间件ICE介绍

    作为一个技术人员,你是否在为不断增长的数据量和日益复杂的业务逻辑而头疼不已,杂乱堆砌在一起的庞大业务让系统越来越脆弱,于是你想到了网格,想到了利用分布式来重组一个健壮的系统架构. 随后,RMI,EJB ...

  5. .NET开源高性能Socket通信中间件Helios介绍及演示

    一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...

  6. AspNetCore 限流中间件IpRateLimitMiddleware 介绍

    IpRateLimitMiddleware(Github: AspNetCoreRateLimit) 是ASPNETCore的一个限流的中间件,用于控制客户端调用API的频次, 如果客户端频繁访问服务 ...

  7. Spring Security(1):认证和授权的核心组件介绍及源码分析

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方式的安全框架.它包括认证(Authentication)和授权(Authorization)两个部 ...

  8. Oracle数据库的两种授权收费方式介绍!

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  9. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

随机推荐

  1. compare.go

    package clientv3 import (     pb "github.com/coreos/etcd/etcdserver/etcdserverpb" ) type C ...

  2. DNS Server Centos 7

    1.安裝服務 #yum update –y #yum install bind –y #systemctl  start named             開啟服務named #systemctl ...

  3. 正则表达式(Regular expressions)使用笔记

    Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...

  4. jenkins+docker 持续构建非docker in docker

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

  5. C++的代理类

    怎样在一个容器中包含类型不同,但是彼此有关系的对象?众所周知,C++的容器只能存放类型相同的元素,所以直接在一个容器中存储不同类型的对象本身是不可能的,只能通过以下两种方案实现: 1. 提供一个间接层 ...

  6. java游戏开发杂谈 - 游戏物体

    现实生活中,有很多物体,每个物体的长相.行为都不同. 物体存在于不同的空间内,它只在这个空间内发生作用. 物体没用了,空间就把它剔除,不然既占地方,又需要花精力管理. 需要它的时候,就把它造出来,不需 ...

  7. ASP.Net Core MVC 发生二次请求

    Bug回忆录 昨天搭建新框架的时候,遇到一个很奇怪的“Bug”,每次请求都会触发两次Aciton,举例子吧,Demo: _Layout.cshtml <!DOCTYPE html> < ...

  8. python接口自动化(二十一)--unittest简介(详解)

    简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest.熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 T ...

  9. .NETCore 新型 ORM 功能介绍

    简介 FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.6.1+. 定义 IFre ...

  10. 无敌简单快速的文件服务器sgfs

    前言 想要构建一个Linux文件服务器?看看下面几个要求是不是你想要的? 1.只需要单节点部署就够了 2.部署启动简单,下载之后,一键启动,一键关闭 3.不需要任何其他的依赖安装,而且运行时占用内存资 ...