asp.net mvc 使用AuthorizeAttribute做授权验证
授权验证,比如登陆验证
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做授权验证的更多相关文章
- 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权
最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- asp.net MVC之AuthorizeAttribute浅析
AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授 ...
- ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NE ...
- ASP.NET MVC Jquery Validate 表单验证的多种方式
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
随机推荐
- PYTHON经典算法-完美平方
问题描述: 给定一个正整数n,找到若干个完全平方数(例如:1,4,9),使得 它们的和等于n,完全平方数的个数最少. 问题示例: 给出n=12,返回3,因为12=4+4+4:给出n=13,返回2,因为 ...
- windows丢失文件的恢复技巧
这几天在使用STVD调试程序的时候,突然跳出来一个“共享冲突”错误,当时并没有在意,点确定后赶紧CTRL+S,然后就一直死在那里了... 结束任务,重启STVD,提示找不到main.c,到此也不以为然 ...
- Linux 常用工具sysstat之iostat
命令解释 用于输出CPU和磁盘I/O相关的统计信息:iostat依赖于sysstat软件包 命令格式 iostat [ 选项 ] [<时间间隔> [<次数>]] 常用选项 -c ...
- markdown常用语法使用笔记+使用技巧(持续更新......)
参考引用内容: 简书教程 一 基本语法 1. 标题 语法: 在想要设置为标题的文字前面加#来表示,一个#是一级标题,二个#是二级标题,以此类推.支持六级标题. 注:标准语法一般在#后跟个空格再写文字 ...
- Asp.Net Core 混合全球化与本地化支持
前言 最近的新型冠状病毒流行让很多人主动在家隔离,希望疫情能快点消退.武汉加油,中国必胜! Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符 ...
- pugixml简单实用
实现快递查询,调用快递100的API,未完成. #include <iostream> #include <fstream> #include <string> # ...
- for实例
#-*- coding:utf-8 *-* salary = 5000 shop_list = [('iphone',9000),('mac book',10000),('python book',9 ...
- [Python源码剖析]获取Python小整数集合范围
#!/usr/bin/env python #-*- coding=utf-8 -*- small_ints = dict() for i in range(-10000,10000): small_ ...
- EMC NW disaster and recovery simulation 1
终于可以模拟成功了虽然只是个实验但是很有借鉴意义. 前期的准备就不说了都懂直接上图吧 scanner -B networker_indexclone to find out the laster bo ...
- 利用视频解析网站免费观看各大平台VIP电影
需求: 观看VIP电影.VIP电视 准备: 1.视频解析网站 2.VIP电影URL 教程开始: 1.百度搜索[视频解析],会索引出大量的视频解析网站,随便选择一个网站. 2.找到想观看的VIP视频,复 ...