授权验证,比如登陆验证

1、自定义属性继承AuthorizeAttribute

2、重写OnAuthorization方法

3、通过AllowAnonymousAttribute特性处理无需授权的Action或者Controller

实现代码:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
CookieService MyCookie = new CookieService(); private long _UserCode = 0; /// <summary>
/// 获取用户编码
/// </summary>
public long UserCode
{
get
{
object userCode = UrlDeCode(MyCookie.Get("UserCode"));
if (userCode != null)
{
long code = 0; long.TryParse(userCode.ToString(), out code); _UserCode = code;
}
else
{
_UserCode = 0;
}
return _UserCode;
}
} /// <summary>
/// 验证授权
/// 1、添加AllowAnonymous特性的,跳过所有授权,包括登陆授权
/// 2、检验登陆授权
/// 3、检验功能授权
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
// 跳过登陆授权
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
{
return;
} // 是否ajax请求
bool isAjax = filterContext.HttpContext.Request.IsAjaxRequest(); // 开始跳转
try
{
// 用户编码为0时,重新登陆
if (UserCode == 0)
{
filterContext.Result = RedirectLogin(); return;
} // 跳过权限
if (filterContext.ActionDescriptor.IsDefined(typeof(NoAuthorizeAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(NoAuthorizeAttribute), true))
{
return;
} // 这里开始判断权限
string controller = filterContext.RouteData.Values["controller"].ToString();
string action = filterContext.RouteData.Values["action"].ToString();
string area = string.Empty; if (filterContext.RouteData.DataTokens.ContainsKey("area"))
{
area = filterContext.RouteData.DataTokens["area"].ToString();
} bool isPermission = true; // 无权限时,跳转
if (!isPermission)
{
// 跳转
filterContext.Result = RedirectNoPermission(isAjax); return;
}
}
catch (Exception ex)
{
Logging.Logger.Error(ex); filterContext.Result = RedirectLogin();
}
} /// <summary>
/// 跳转到无权限的提示
/// </summary>
/// <param name="isAjax"></param>
/// <returns></returns>
public RedirectToRouteResult RedirectNoPermission(bool isAjax)
{
RouteValueDictionary routeValue = null; if (isAjax)
{
routeValue = new RouteValueDictionary(new { action = "AjaxNoPermission", controller = "Permission" });
}
else
{
routeValue = new RouteValueDictionary(new { action = "NoPermission", controller = "Permission" });
} return new RedirectToRouteResult(routeValue);
} /// <summary>
/// 跳转到登录页
/// </summary>
/// <returns></returns>
public RedirectToRouteResult RedirectLogin()
{
var routeValue = new RouteValueDictionary(
new
{
action = "Index",
controller = "login",
area = "Fire",
//ReturnUrl = url
}); return new RedirectToRouteResult(routeValue);
} /// <summary>
/// 解码
/// </summary>
public string UrlDeCode(string str)
{
return System.Web.HttpUtility.UrlDecode(str, System.Text.Encoding.UTF8);
}
}

  

使用代码:

[UrlAuthorize]
public class HomeController : Controller
{
[AllowAnonymous]
public ActionResult Index()
{
return View();
} //[UrlAuthorize]
public ActionResult Test()
{
return View();
}
}

全局使用:

在App_Start/FilterConfig中添加

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute()); // 授权验证 取消注释时,会开启
// filters.Add(new MyAuthorizeAttribute());
}

  

asp.net mvc 使用AuthorizeAttribute做授权验证的更多相关文章

  1. 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权

    最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...

  2. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  3. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  4. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  5. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

  6. asp.net MVC之AuthorizeAttribute浅析

    AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授 ...

  7. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NE ...

  8. ASP.NET MVC Jquery Validate 表单验证的多种方式

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  9. [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

随机推荐

  1. Python - Unittest小结

    一.Unittest 单元测试框架,可用于自动化测试用力组织,执行,输出结果 二.Unittest构成 Test Case Test Suite Test Fixture Test Runner (图 ...

  2. Eclipse PyDEV 和 SVN 插件安装指南

    安装PyDEV 及 SVN 插件 一.Eclipse->help->install newsoftware 配置pydev解释器 在Eclipse菜单栏中,点击Windows ->P ...

  3. JS中for...in循环陷阱及遍历数组的方式对比

    JavaScript中有很多遍历数组的方式,比较常见的是for(var i=0;i<arr.length;i++){},以及for...in...循环等,这些遍历都有各自的优缺点,下面来看看各种 ...

  4. Ubuntu 入门笔记(1)

    在阿里云上申请了一个云服务器,开始学习Linux.我选择的是Ubuntu 14.04 ,在登录时就绕了我好长时间,输入用户名是有显示的,但是输入密码就没有反应了,查找了之后才发现原来这是Ubuntu ...

  5. python学习Day02

    [主要内容] 1. 循环. while循环 while 条件: 代码块(循环体) 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条件为假. ...

  6. 温故知新,.NET 重定向深度分析

    在早期的.NET Framework程序员心里,重定向Redirect其实分为两种: Response.Redirect: Response对象的Redirect方法提供了一种实现客户端重定向的方法 ...

  7. js数组冷知识

    省略数组值 在声明数组时,省略一些数组值 let a = [1,,3] //a.length为3 a = [,,] //a.length为2 0 in a //false,a在索引0处没有元素 稀疏数 ...

  8. python列表与元祖

    python 的列表和元素: 共同点:有序的 区别:1.列表可以修改增加删除列表内容,元组不能修改 联系:元组中包含列表的元素,可以修改列表元素. 分析:1.列表:LIST1=[1,2,3,4,5,6 ...

  9. CodeIgniter框架使用总结

    CodeIgniter框架 1.回忆MVC 1.1.M:模型,提供数据,保存数据 1.2.V:视图,只负责显示,表单form 1.3.C:控制器,协调模型和视图 1.4.action:动作,是控制器中 ...

  10. html标签学习入门 随笔

    Html学习入门    随笔1: HTML 标题 HTML 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. 标题仅用于标题文本  不应该被使用在加粗字 ...