详解.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute)
 更新时间:2019年04月28日 08:31:11   作者:小世界的野孩子  

这篇文章主要介绍了.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在.Net Core 中使用AuthorizeFilter或者ActionFilterAttribute来实现登录权限验证和授权
一、AuthorizeFilter

新建授权类AllowAnonymous继承AuthorizeFilter,IAllowAnonymousFilter

public class AllowAnonymous : AuthorizeFilter, IAllowAnonymousFilter
{

}

新建拦截类继承AuthorizeFilter

public class LoginAuthorzation : AuthorizeFilter
{

}

在拦截类里加入处理请求的方法

/// <summary>
/// 请求验证,当前验证部分不要抛出异常,ExceptionFilter不会处理
/// </summary>
/// <param name=”context”>请求内容信息</param>
public override async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
if (IsHaveAllow(context.Filters))
{
return;
}

//解析url
// {/ Home / Index}
var url = context.HttpContext.Request.Path.Value;
if (string.IsNullOrWhiteSpace(url))
{
return;
}

var list = url.Split(“/”);
if (list.Length<=0||url==”/”)
{
return;
}
var controllerName = list[1].ToString().Trim();
var actionName = list[2].ToString().Trim();

//验证
var flag=PowerIsTrue.IsHavePower(controllerName, actionName);
if (flag.Item1!=0)
{

context.Result = new RedirectResult(“/Home/Index”);
}
}

//判断是否不需要权限

public static bool IsHaveAllow(IList<IFilterMetadata> filers)
{
for (int i = 0; i < filers.Count; i++)
{
if (filers[i] is IAllowAnonymousFilter)
{
return true;
}
}
return false;

}

新建一个业务逻辑判断的类

public static (int,string) IsHavePower(string controllerName,string actionName)
{

return (0,”通过”);

}

在Startup注册

services.AddMvc(options =>
{

options.Filters.Add<LoginAuthorzation>(); // 添加身份验证过滤器

}

context.HttpContext.Request.Path.Value   获取请求过来的url
二、ActionFilterAttribute
创建权限判断类继承ActionFilterAttribute

public class ActionFilterAttributeLogin: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)

{
var isDefined = false;
var controllerActionDescriptor = filterContext.ActionDescriptor as ControllerActionDescriptor;
if (controllerActionDescriptor != null)
{
isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
.Any(a => a.GetType().Equals(typeof(NoPermissionRequiredAttribute)));
}
if (isDefined) return;
if (string.IsNullOrWhiteSpace(filterContext.HttpContext.Request.Query[“LoginInfo”].ToString()))
{
var item = new ContentResult();
item.Content = “没得权限”;

filterContext.Result = new RedirectResult(“/Account/Login”);
}
base.OnActionExecuting(filterContext);
}

public class NoPermissionRequiredAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);

}

}
}

在Startup注册

services.AddMvc(options =>
{
options.Filters.Add<ActionFilterAttributeLogin>(); // 添加身份验证过滤器 — 菜单操作权限

}

filterContext.ActionDescriptor as ControllerActionDescriptor    获取请求进来的控制器与方法
controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true )
.Any(a => a.GetType().Equals( typeof (NoPermissionRequiredAttribute)))      判断请求的控制器和方法有没有加上NoPermissionRequiredAttribute(不需要权限)
string.IsNullOrWhiteSpace(filterContext.HttpContext.Request.Query[“LoginInfo”].ToString())     判断请求头是否有标识

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

您可能感兴趣的文章:ASP.NET Core自定义中间件如何读取Request.Body与Response.Body的内容详解ASP.NET Core使用自定义验证属性控制访问权限详解ASP.NET Core自定义本地化教程之从文本文件读取本地化字符串.NET Core2.1如何获取自定义配置文件信息详解.Net Core官方JWT授权验证的全过程asp.net core2.2多用户验证与授权示例详解.NET Core授权失败自定义响应信息的操作方法

.Net
Core
权限
验证
授权

相关文章
URL中去除指定参数实现C#代码URL中去除指定参数在项目开发中还是很常见的,本文将介绍下它在c#代码中的实现,感兴趣的朋友可以参考下哈 2013-04-04
asp.net core 修改默认端口的几种方法这篇文章主要介绍了asp.net core 修改默认端口的几种方法,文中讲解非常详细,代码和图片帮助大家更好的理解,感兴趣的朋友可以了解下 2020-06-06
sqlserver 删除重复记录处理(转)删除重复记录有大小关系时,保留大或小其中一个记录 2011-07-07
ASP.NET过滤HTML标签只保留换行与空格的方法这篇文章主要介绍了ASP.NET过滤HTML标签只保留换行与空格的方法,包含网上常见的方法以及对此方法的改进,具有一定的参考借鉴价值,需要的朋友可以参考下 2014-12-12
比较完整的 asp.net 学习流程好多朋友想学习后台编程语言,但请注意的事,学习后台是个循序渐进的过程,不可能一下就到位,其实不只是asp.net其它的编程语言都需要下面的一些知识。 2009-06-06
Visual Studio 2017安装失败的解决方法这篇文章主要为大家详细介绍了Visual Studio 2017安装失败的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04
vs 不显示行号的操作方法vs 不显示行号的操作方法… 2007-12-12
Asp.net mvc 数据调用示例代码Asp.net mvc 数据调用示例代码,学习asp.net mvc框架的朋友可以参考下。 2010-10-10
解决asp.net ajax sys未定义的解决方法这个方法绝对it560原创,而且会让大家少走弯路,对于网上流传的webconfig配置错误的说法绝对是忽悠人,配置文件错误的记录大概是0.1% 2010-06-06
ASP.NET2.0数据库入门之SqlDataSourceASP.NET2.0数据库入门之SqlDataSource… 2006-09-09

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。