.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<=||url=="/")
{
return;
}
var controllerName = list[].ToString().Trim();
var actionName = list[].ToString().Trim(); //验证
var flag=PowerIsTrue.IsHavePower(controllerName, actionName);
if (flag.Item1!=)
{ context.Result = new RedirectResult("/Home/Index");
}
} //判断是否不需要权限 public static bool IsHaveAllow(IList<IFilterMetadata> filers)
{
for (int i = ; i < filers.Count; i++)
{
if (filers[i] is IAllowAnonymousFilter)
{
return true;
}
}
return false; }
新建一个业务逻辑判断的类
public static (int,string) IsHavePower(string controllerName,string actionName)
{ return (,"通过"); }
在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()) 判断请求头是否有标识
欢迎大家扫描下方二维码,和我一起学习更多的知识
原文:使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)--第1部分 原文链接:https://www.codeproject.com/Articles/5160941/ASP- ... OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ... 前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ... Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.案例结构总览 这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为 ... 在身份认证中,如果某个Action需要权限才能访问,最开始的想法就是,哪个Action需要权限才能访问,我们写个特性标注到上面即可,[TypeFilter(typeof(CustomAuthorize ... 前言 身份验证: Authentication 授权: Authorization net core 中的身份验证和授权这两个部分,是相辅相成的.当初我在学在部分的时候,是看的 net core 官网 ... 权限验证: /// <summary> /// 管理员身份验证 /// </summary> public class BasicAuthenticationAttribute ... 什么是Claims? 这个直接阅读其他大神些的文章吧,解释得更好. 相关文章阅读: http://www.cnblogs.com/JustRun1983/p/4708176.html http://w ... 原文:.NET CORE TOKEN 权限验证 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012601647/article/details/ ... 开发时,新建WebApi项目需要用到Restful规范,此时请求有POST\PUT\DELETE\GET等请求 此时需要在web.config中加入 <system.webServer> ... 推荐几个好的 Maven 常用仓库网址:http://mvnrepository.com/http://search.maven.org/http://repository.sonatype.org/ ... 当多个连续可乘矩阵做乘法时,选择正确的做乘顺序可以有效减少做乘法的次数,而选择的方法可以很容易的通过DP实现. 原理就是对于每一个所求矩阵,搜索所有可以相乘得到它的方法,比较它们的消耗,选取最小值作为 ... 1.介绍 MySQL数据库设置读写分离,可以使对数据库的写操作和读操作在不同服务器上执行,提高并发量和响应速度.现在的网站一般大点的,都采用有数据库主从分离.读写分离,既起到备份作用也可以减轻数据库的 ... 目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ... HP-Socket 详细介绍 HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/ ... 1,在start.S中执行373行b lowlevel_init跳转到/board/samsung/goni/lowlevel.S中,此代码中初始化一样硬件. 找到241行,此行执行URAT初始化,如 ... #include <stdio.h> #define NUMBER 1000 int main(){ int isPrime[NUMBER]; ; i < NUMBER; i++){ ... 转自http://blog.sina.com.cn/s/blog_6b347b2a0101379o.html cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交 ... JDK提供了ObjectOutputStream和ObjectInputStream,用于通过网络对POJO的基本数据类型和图进行序列化和反序列化.该API并不复杂,而且可以被应用于任何实现了java ....Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute)的更多相关文章
随机推荐