前言

咱们上篇说到,过滤的简单介绍,但是未介绍如何使用,接下来几篇,我来给大家讲讲如何使用,今天第一篇是Authorization。认证过滤器,

开发环境介绍

  • 开发工具:VS2019
  • 开发环境:.net core 3.1

1.创建项目



首先创建一个Api的项目,选择.net core的版本,选择好,点击创建即可

2 创建一个自定义类

public class AuthenticationTest: IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
//逻辑处理
}
}

查看IAuthorizationFilter源代码

IAuthorizationFilter接口只有一个方法OnAuthorization,

创建一个类,继承IAuthorizationFilter接口,然后实现一下接口方法。是不是有点疑问,AuthorizationFilterContext是什么?

3 AuthorizationFilterContext是什么?

中文理解:授权过滤器上下文

六大属性:

  • ActionDescriptor:获取或设置所选动作的ActionDescriptor。(获取请求的Method)
  • Filters:获取所有适用的IFilterMetadata实现。(可以检测请求的Action是否具备AllowAnonymous,如果有,则直接跳过AuthorizationFilter滤器)
  • HttpContext:获取或设置当前请求的HttpContext。(获取当前请求的很多信息,例如当前用户信息,当前请求的Heads[可以从Head获取Token,即验证Token])
  • ModelState:获取模型状态字典。在你使用MVC框架下,对Molde进行验证的时候才会使用到,去验证模型是否验证通过。
  • Result:获取或设置请求的结果。将结果设置为null授权过滤器内的非值将使过滤器管道的其余部分短路。
  • RouteData:获取或设置当前请求的RouteData。(获取当前路由的信息)

4 编写简答的业务逻辑

    public class AuthenticationTest: IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
Console.WriteLine("我是Authorization过滤器");
//请求的地址
var url = context.HttpContext.Request.Path.Value;
#region 打印头部信息
var heads = context.HttpContext.Request.Headers;
string msg = string.Empty; foreach (var item in heads)
{
msg += item.Key + ":" + item.Value + "\r\n";
} Console.WriteLine("我是heads:" + msg);
#endregion
}
}

5 注册全局过滤器

找到Startup.cs文件,然后找到其中一个方法ConfigureServices,将代码修改为这样:

 public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(); //全局添加过滤器
#region 全局过滤器
services.AddMvc(a => {
a.Filters.Add<AuthenticationTest>();
});
#endregion
}

6.启动项目(这里是使用Kestrel作为服务器启动,启动的是控制台程序)

启动之后,会在控制台打印如上图所示,我们可以获取当前请求的Head信息。如果Head包含Token,我们也是可以获取token,然后验证token,后面可以进行一系列自己的逻辑运算。

7.1扩展IAsyncAuthorizationFilter

过滤器还存在一个异步过滤器,它是继承IAsyncAuthorizationFilter

    public class AsyncAuthentication : IAsyncAuthorizationFilter
{
public Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
return Task.CompletedTask;
}
}

异步确认请求授权的过滤器,和之前的IAuthorizationFilter区别,大家显而易见,只是处理请求的方式不一样,一个是同步,一个是异步,如果了解线程,就应该了解二者的区别,在这只做简单介绍,编写你自己业务逻辑,可以自由编写。

7.2 扩展:修改401返回的返回值

正常的401报错:

public class AuthenticationTest: IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
context.Result = new StatusCodeResult(401);
}
}

效果如下图:

这种并不是客户想看到的,我们可以自定义返回值。

自定义的401报错:

 public class AuthenticationTest: IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
context.Result = new JsonResult(new { StatusCodeResult = StatusCodes.Status401Unauthorized, Title = "401", Time = DateTime.Now,test="测试" });
}
}

效果如下图:

自定义设置返回的值,是没有限制,可以根据场景进行自定义,合适才是最好。

8.总结:

通过上面的一顿操作,我们应该能明白,一个自定义的权限过滤器的创建,注册,使用等。这个过滤器让我们能控制用户的请求,哪些是请求是当前用户可以匿名登录,哪些请求是当前用户无权访问的,在一方面,可以帮助我编写自定义的权限管理,还是那句话,合适才是重要的!

.net core中的哪些过滤器 (Authorization篇)的更多相关文章

  1. 文章翻译:ABP如何在EF core中添加数据过滤器

    原文地址:https://aspnetboilerplate.com/Pages/Documents/Articles%5CHow-To%5Cadd-custom-data-filter-ef-cor ...

  2. 对象池在 .NET (Core)中的应用[2]: 设计篇

    <编程篇>已经涉及到了对象池模型的大部分核心接口和类型.对象池模型其实是很简单的,不过其中有一些为了提升性能而刻意为之的实现细节倒是值得我们关注.总的来说,对象池模型由三个核心对象构成,它 ...

  3. .net core中的哪些过滤器

    前言 书承接上文,咱们上回说到,.net core中各种日志框架, 今天我讲讲.net core中的内置过滤器吧! 1.什么是过滤器? ASP.NET Core中的筛选器允许代码在请求处理管道中的特定 ...

  4. 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)

    一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...

  5. ASP.NET Core中使用自定义MVC过滤器属性的依赖注入

    除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的 ...

  6. 如何在ASP.NET Core中编写高效的控制器

    ​通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...

  7. 在Asp.Net Core中集成Kafka

    在我们的业务中,我们通常需要在自己的业务子系统之间相互发送消息,一端去发送消息另一端去消费当前消息,这就涉及到使用消息队列MQ的一些内容,消息队列成熟的框架有多种,这里你可以读这篇文章来了解这些MQ的 ...

  8. [转]ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    本文转自:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html 原文:Filters 作者:Steve Smith 翻 ...

  9. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

随机推荐

  1. hdfs的JAVA必会操作

    hdfs的必会操作 创建目录 //创建目录 public static void mkdir(String filePath) throws URISyntaxException, IOExcepti ...

  2. 使用notepad++的nppexec插件格式化json和压缩json内容

    1.遇到问题 因为平时需要查看json内容,有时候修改后需要压缩json,虽然已经有网页可以实现,但每次打开网页也很麻烦啊.虽然notpad++也有NPPJSONViewer这个插件,但是目前只有格式 ...

  3. ubuntu vi编辑器上下左右为ABCD的解决办法

    这个ubuntu系统自带的vi版本太老导致的,所以解决办法就是安装新版的vi编辑器: 首先卸载旧版本的vi编辑器: $sudo apt-get remove vim-common 然后安装新版的vi: ...

  4. kinaba 安装踩坑: FATAL Error: [elasticsearch.url]: definition for this key is missing 转

     安装  https://www.jianshu.com/p/875457cb8da6   操作系统:Linux kibana 版本: 7.4.0 1. 在/etc/yum.repos.d/ 下新建 ...

  5. nginx安全:配置ssl证书(https证书)

    一,配置https证书的意义 https协议是由SSL+http协议构建的安全协议,支持加密传输和身份认证, 安全性比http要更好,因为数据的加密传输,更能保证数据的安全性和完整性 例如:不使用ht ...

  6. 【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息

    问题描述 在使用Azure App Service时候,我们有时候对 一些请求发生错误毫无头绪,能从错误代码中知道请求错误,但是更多的信息呢? 当我们需要更多的信息时候,通常有以下的一些方式来查找问题 ...

  7. 【API管理 APIM】如何查看APIM中的Request与Response详细信息,如Header,Body中的参数内容

    问题描述 通过APIM门户或者是Developer门户,我们可以通过Test功能测试某一个接口,通过Trace可以获取非常详细的Request,Response的信息,包含Header,X-Forwa ...

  8. python 微信小程序自动化

    微信小程序自动化 https://www.cnblogs.com/yyoba/python27 - FautoTesthttps://www.cnblogs.com/yyoba/p/9973731.h ...

  9. H5移动端实现图片上传

    转至 :https://blog.csdn.net/qq_37610423/article/details/84319410 效果图: 我在用这个的时候发现博主少写了一些东西,导致功能无法实现,所以我 ...

  10. VUE 如何分环境打包(开发/测试/生产)配置

    前言 之前小玲一直处于更新,迭代项目的状态,开发环境.测试环境.生产环境都是前辈配置好的,自己几乎没有配置过,这次做几个新项目时,面临着上线,需要分环境打包配置,于是在网上遨游了一会会,摸索着按照网上 ...