Authorize特性类AuthorizeAttribute就称作MVC的Filter,它在横向为MVC框架扩展功能,让我们可以更方便的处理日志、授权、缓存等而不影响纵向主体功能。

Authorization:实现IAuthorizationFilter接口,默认实现类AuthorizeAttribute,在调用Action方法前首先处理认证信息。

授权过滤器顾名思义就是授权用的,授权过滤器在方法执行之前执行,用于限制请求能不能进入这个方法,新建一个方法:

public JsonResult AuthorizeFilterTest()

{

return Json(new ReturnModel_Common { msg = "hello world!" });

}

直接访问得到结果:

现在假设这个AuthorizeFilterTest方法是一个后台方法,用户必须得有一个有效的令牌(token)才能访问,常规做法是在AuthorizeFilterTest方法里接收并验证token,但是这样一旦方法多了,每个方法里都写验证的代码显然不切实际,这个时候就要用到授权过滤器:

public class TokenValidateAttribute : AuthorizeAttribute

{

/// <summary>

/// 授权验证的逻辑处理。返回true则通过授权,false则相反

/// </summary>

/// <param name="httpContext"></param>

/// <returns></returns>

protected override bool AuthorizeCore(HttpContextBase httpContext)

{

string token = httpContext.Request["token"];

if (string.IsNullOrEmpty(token))

{

return false;

}

else

{

return true;

}

}

}

新建了一个继承AuthorizeAttribute的类,并重写了其中的AuthorizeCore方法,这段伪代码实现的就是token有值即返回true,没有则返回false,标注到需要授权才可以访问的方法上面:

[TokenValidate]public JsonResult AuthorizeFilterTest()

{    return Json(new ReturnModel_Common { msg = "hello world!" })  }

标注TokenValidate后,AuthorizeCore方法就在AuthorizeFilterTest之前执行,如果AuthorizeCore返回true,那么授权成功执行AuthorizeFilterTest里面的代码,否则授权失败。不传token:

传token:

不传token授权失败时进入了MVC默认的未授权页面。这里做下改进:不管授权是成功还是失败都保证返回值格式一致,方便前端处理,这个时候重写AuthorizeAttribute类里的HandleUnauthorizedRequest方法即可:

/// <summary>

/// 授权失败处理

/// </summary>

/// <param name="filterContext"></param>

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)

{

base.HandleUnauthorizedRequest(filterContext);

var json = new JsonResult();

json.Data = new ReturnModel_Common

{

success = false,

code = ReturnCode_Interface.Token过期或错误,

msg = "token expired or error"

};

json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

filterContext.Result = json;

}

效果:

经验:授权过滤器最广泛的应用还是做权限管理系统,用户登录成功后服务端输出一个加密的token,后续的请求都会带上这个token,服务端在AuthorizeCore方法里解开token拿到用户ID,根据用户ID去数据库里查是否有请求当前接口的权限,有就返回true,反之返回false。这种方式做授权,相比登录成功给Cookie和Session的好处就是一个接口PC端、App端共同使用。

ASP.NET MVC 4 过滤器(Authorize)相关推荐

  1. ASP.NET MVC动作过滤器

    ASP.NET MVC中包含以下4种不同类型的Action Filter: 类型 使用时机 接口 实现方法 授权过滤器(Authorization Filter) 在执行任何Filter或Action ...

  2. asp.net mvc 利用过滤器进行网站Meta设置

    过去几年都是用asp.net webform进行开发东西,最近听说过时了,同时webform会产生ViewState(虽然我已经不用ruanat=server的控件好久了 :)),对企业应用无所谓,但 ...

  3. ASP.NET MVC的过滤器笔记

    过滤器概念 APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用 ...

  4. ASP.NET MVC AuthorizeAttribute

    AuthorizeAttribute 是 ASP.NET MVC 的过滤器之一,又称为认证和授权过滤器,即判断登录与否授权与否.当为某个控制器或动作方法附加该特性时,没有登录或授权的账户是不能访问对应 ...

  5. 2021年最新ASP.NET MVC面试题汇总

    这个给.NET开发者们整理了一份<.NET/C#面试手册>,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间.对于没有跳槽打算的也可以复习一下 ...

  6. ASP.NET MVC过滤器自定义Authorize实现身份验证

    最近在做一个.NET MVC框架的后台项目,涉及到5个权限,而控制器下的方法有些只能高权限用户使用,低权限用户不能访问,一开始是在方法里面写判断,但是功能方法多了以后,发现代码重复的很严重,不符合面向 ...

  7. ASP.NET MVC使用Authorize过滤器验证用户登录

    ASP.NET MVC使用Authorize过滤器验证用户登录.Authorize过滤器首先运行在任何其它过滤器或动作方法之前,主要用来做登录验证或者权限验证. 示例:使用Authorize过滤器实现 ...

  8. ASP.NET MVC 过滤器(一)

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  9. ASP.NET MVC 4 (三) 过滤器

    先来看看一个例子演示过滤器有什么用: public class AdminController : Controller { // ... instance variables and constru ...

最新文章

  1. Session的lock()方法
  2. java 操作txt文件
  3. 13个对Android开发者有帮助的工具和资源(转自android吧(www.and8.com))
  4. mantis1.18升级1.2X方法
  5. socket编程中常见的概念问题!
  6. VC6++ output :error executing c:\windows\system32\cmd.exe.
  7. 【jQuery小实例】---2自定义动画
  8. .NET开发 正则表达式中的 Bug
  9. Velocity 语法学习
  10. kivy python 读取oracle数据库_python app (kivy)-与小型数据库连接,实现注册登录操作...
  11. AVR单片机教程——DAC
  12. 轻松解决ArcGIS Pro 安装中文汉化包或离线帮助文档时报错“指定路径为空”
  13. Visio连接线连接图形固定位置,不能随意位置连接,提示粘附到形状
  14. 定时任务最简单的3种实现方法(超好用)
  15. 折腾了5个多小时的OC启动与win10冲突
  16. Efficient Dense Frontier Detection for 2D Graph SLAM Based on Occupancy Grid Submaps
  17. 游客 计算机英语,游客的英文,游客怎么都用英语!
  18. 华为路由器ws5200虚拟服务器,华为路由器配置dhcp怎么弄?华为路由WS5200设置DHCP服务器方法...
  19. 【ZZULIOJ】1026: 字符类型判断
  20. tsm9_Momentum_Ultimate Oscillators_MACDivergence index_Stochastic RSI_A/D Oscillator_RVI Vigor ADX

热门文章

  1. 视频编码中封装格式RMVB,AVI,264
  2. 预处理指令pragma常见用法集锦(#pragma once、#pragma comment和#pragma warning)
  3. 数字图像处理——2D降噪
  4. struct和typedef struct在C与C++中用法
  5. 【数据结构】——归并排序
  6. html期末网页设计,求网页设计的期末作业一份 HTML的
  7. elementui el-from 怎样显示图片_vue2.0使用weui.js的uploader组件上传图片(兼容移动端)...
  8. ios 上传图片到阿里云的oss_JEECG BOOT 上传如何同时支持阿里OSS、Minio、本地存储
  9. C++给函数传数组参数C++给函数传数组参数
  10. 大数据时代下的迁移学习_继深度学习后,下一个热点技术是迁移学习