授权验证,比如登陆验证

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. HanLP《自然语言处理入门》笔记--1.新手上路

    1. 新手上路 自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学.人工智能及语言学的交叉学科,它们的关系如下图所示.这门学科研究的是如何通过机器学习 ...

  2. DRF框架之Serializer序列化器的反序列化操作

    昨天,我们完成了Serializer序列化器的反序列化操作,那么今天我们就来学习Serializer序列化器的最后一点知识,反序列化操作. 首先,我们定要明确什么是反序列化操作? 反序列化操作:JOS ...

  3. Gloang Swagger

    功能 自动化生产接口文档 安装 # 安装swaggo get -u github.com/swaggo/swag/cmd/swag # 安装 gin-swagger go get -u github. ...

  4. vscode 调试 react 项目

    主要分为以下三个步骤 安装 debug for chrome 配置 launch.json 文件 配置内容如下 { "version": "0.2.0", &q ...

  5. QtGui实现计算圆的面积

    dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QtWidgets/QDialog> #include <QtWidgets ...

  6. OpenGL学习网址2

    http://www.opengpu.org/forum.php?mod=viewthread&tid=7525

  7. c++算法:计算行列式的值(详细讲解)

    参考了:https://blog.csdn.net/u011885865/article/details/42032229 需要的基础:学过<线性代数>,知道行列式值的求法 基本公式:对于 ...

  8. Rust入坑指南:步步为营

    俗话说:"测试写得好,奖金少不了." 有经验的开发人员通常会通过单元测试来保证代码基本逻辑的正确性.如果你是一名新手开发者,并且还没体会到单元测试的好处,那么建议你先读一下我之前的 ...

  9. 【机器学习】算法原理详细推导与实现(六):k-means算法

    [机器学习]算法原理详细推导与实现(六):k-means算法 之前几个章节都是介绍有监督学习,这个章解介绍无监督学习,这是一个被称为k-means的聚类算法,也叫做k均值聚类算法. 聚类算法 在讲监督 ...

  10. VFP执行 SQL Server 储存过程示例

    PUBLIC errvalPUBLIC errmsgPUBLIC handleerrval=0errmsg=' ' *Sql Server 连接参数sourcename= 'test'user= 's ...