MVC身份验证机制

  1 namespace BCPayWeb.Core
  2 {
  3     public class UserLoginAttribute : AuthorizeAttribute
  4     {
  5         protected override bool AuthorizeCore(HttpContextBase httpContext)
  6         {
  7             // httpContext.Session["User"] = new Users() { Id = 1, RoleId = 1 };
  8
  9             if (httpContext.Session["User"] == null)
 10             {
 11                 httpContext.Response.StatusCode = 401;
 12                 return false;
 13             }
 14
 15
 16             base.AuthorizeCore(httpContext);
 17
 18             return true;
 19         }
 20
 21         public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
 22         {
 23
 24             try
 25             {
 26                 string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
 27                 string actionName = filterContext.ActionDescriptor.ActionName;
 28
 29
 30                 if (filterContext.HttpContext.Session["User"] == null)
 31                 {
 32                     if (controllerName.ToLower() != "users")
 33                     {
 34                         if (filterContext.HttpContext.Request.IsAjaxRequest())
 35                         {
 36
 37                             throw new Exception("登录超时,请重新登录。");
 38                         }
 39
 40                         string url = filterContext.HttpContext.Request.RawUrl;
 41                         if (url.Length < 4 || url.Contains("Excel") || url.Contains("excel"))
 42                         {
 43                             BCPayWebDataContext db = new BCPayWebDataContext();
 44                             url = "/Pay/Phone?mid=2";
 45                         }
 46                         filterContext.Result = new RedirectResult(string.Format("/Users/Login?returnUrl={0}", HttpUtility.UrlEncode(url)));
 47                         return;
 48                     }
 49                 }
 50
 51                 if (controllerName.ToLower() != "menu")
 52                 {
 53                     BCPayWebDataContext db = new BCPayWebDataContext();
 54                     var user = filterContext.HttpContext.Session["User"] as SerializableUser;
 55
 56                     var query = from q in db.RoleMenu
 57                                 where q.RoleId == user.RoleId && q.Menu.Url.ToLower() == string.Format("/{0}/{1}", controllerName, actionName).ToLower()
 58                                 select q;
 59
 60                     if (query.Count() < 1)
 61                     {
 62                         throw new Exception("您没有权限访问此页面。");
 63                     }
 64                 }
 65
 66
 67                 filterContext.HttpContext.Session["Error"] = null;
 68
 69                 base.OnAuthorization(filterContext);
 70             }
 71             catch (Exception ex)
 72             {
 73                 try
 74                 {
 75
 76                     filterContext.HttpContext.Session["Error"] = ex.Message;
 77                     filterContext.HttpContext.Response.Write(ex.Message);
 78                     filterContext.HttpContext.Response.End();
 79                     filterContext.Result = new RedirectResult("/Users/Login");
 80                 }
 81                 catch (Exception)
 82                 {
 83                 }
 84             }
 85
 86         }
 87
 88         protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
 89         {
 90
 91             if (filterContext.HttpContext.Request.IsAjaxRequest())
 92             {
 93             }
 94             else
 95             {
 96                 string url = filterContext.HttpContext.Request.RawUrl;
 97                 if (url.Length < 4)
 98                 {
 99                     url = "/Pay/Phone?mid=2";
100                 }
101                 filterContext.Result = new RedirectResult(string.Format("/Users/Login?returnUrl={0}", HttpUtility.UrlEncode(url)));
102             }
103         }
104     }
105 }

引用时 只需在acticon或方法名上上加入

[UserLoginAttribute]即可
 1  [UserLoginAttribute]
 2     public class MenuController : Controller
 3     {
 4         //左侧导航
 5         // GET: /Menu/
 6         public PartialViewResult Index()
 7         {
 8             var user = Session["User"] as SerializableUser;
 9             if (user != null)
10             {
11                 BCPayWebDataContext db = new BCPayWebDataContext();
12
13                 var query = from q in db.RoleMenu
14                             where q.RoleId == user.RoleId && q.Menu.IsShow == 1
15                             orderby q.Menu.Id ascending
16                             select new MyMenu
17                             {
18                                 Id = q.Menu.Id,
19                                 ParentId = q.Menu.ParentId,
20                                 Tip = q.Menu.Tip,
21                                 Title = q.Menu.Title,
22                                 Type = q.Menu.Type,
23                                 Url = q.Menu.Url,
24                                 Sort = q.Menu.Sort,
25                             };
26
27                 var lst = query.ToList();
28
29                 lst.Sort(SortMenuCompare);
30
31                 return PartialView(lst);
32             }
33
34
35             return PartialView();
36         }
37
38
39         private static int SortMenuCompare(MyMenu m1, MyMenu m2)
40         {
41             return m1.Sort.CompareTo(m2.Sort);
42         }
43
44     }
				
时间: 2024-09-30 05:32:35

MVC身份验证机制的相关文章

定制Asp.NET 5 MVC内建身份验证机制 - 基于自建SQL Server用户/角色数据表的表单身份验证

背景 在需要进行表单认证的Asp.NET 5 MVC项目被创建后,往往需要根据项目的实际需求做一系列的工作对MVC 5内建的身份验证机制(Asp.NET Identity)进行扩展和定制: Asp.NET内建的身份验证机制会使用Local DB(本地数据库)读写用户相关的信息,而在数据库驱动的项目中,管理业务信息的数据库通常是特定的数据库环境,比如远程SQL Server数据库实例或Access数据库等等,业务数据库中保存着一系列针对业务需求的数据表,因此需要定制MVC 5内建身份验证,使其操作

Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码

本问主要介绍asp.net的身份验证机制及asp.net MVC拦截器在项目中的运用.现在让我们来模拟一个简单的流程:用户登录>权限验证>异常处理 1.用户登录 验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码. 引入命名空间 using System.Web.Security; Users ModelUser = new Users() { ID = 10000, Nam

通过扩展改善ASP.NET MVC的验证机制[使用篇]

原文:通过扩展改善ASP.NET MVC的验证机制[使用篇] ASP.NET MVC提供一种基于元数据的验证方式是我们可以将相应的验证特性应用到作为Model实体的类型或者属性/字段上,但是这依然具有很多的不足.在这篇文章中,我结合EntLib的VAB(Validation Application Block)的一些思想通过扩展为ASP.NET MVC提供一种更为完善的验证机制.[源代码从这里下载] 目录: 一.扩展旨在解决怎样的验证问题 二.一个简单的消息维护组件 三.多语言的支持 四.基于某

通过扩展改善ASP.NET MVC的验证机制[实现篇]

原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持,我们现在来看看这样的验证解决方案最终是如何实现的. 目录: 一.为验证创建一个上下文:ValidatorContext 二.通过自定义ActionInvoker在进行操作执行之前初始化上下文 三.为Validator创建基类:ValidatorBaseAttribute 四.通过自定义ModelValidat

JAX-RS REST客户端实现基本身份验证机制

<JAX-RS REST客户端实现基本身份验证机制> 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs 很多SaaS API项目提供了HTTP访问的基本身份验证机制.因此,本文提供了如何在JAX-RS REST客户端实现基本的访问认证.有些HTTP客户端库提供了基本身份验证过滤器,使用这些库会更简单. 1.基本的身份验证机制 简单来说,基本的身份验证机制是在服务器端实现的身份验证机制,只需要客户端提供用户名和密码即可,但是它对于HT

MVC身份验证及权限管理

MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: <authentication mode="Forms"> <forms loginUrl="Login.aspx" defaultUrl="Default.aspx" protection="All" /> &l

ASP.NET 身份验证机制

ASP.NET提供了3种认证方式:windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证          :用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.Passport验证      :通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务. 关于这三种验证方式的配置,推荐一篇博文:http://www.cnblogs.com/chenqingwei/arc

jwt的ASP.NET MVC 身份验证

Json Web Token(jwt)      一种不错的身份验证及授权方案,与 Session 相反,Jwt 将用户信息存放在 Token 的 payload 字段保存在客户端,通过 RSA 加密的方式,保证数据不会被篡改,验证数据有效性. 详细请参考jwt.io. 我现在还是一枚小白,希望能帮助更多的小白成长.因此文章都是一些比较简单的使用过程,文字讲解较少,怕误人子弟. 小白成长为大牛过程:知其然而不知其所引然 再知其然而知其所引然 1. 开发环境如下 vs2017+ASP.NET MV

010.MVC身份验证

一.身份验证 1.定义: 身份验证是从用户出获取表示凭据(如用户名和密码)并听过某些授权机构验证哪些凭据的过程. 配置节中存储了登录用户的信息,这种方式可以适用于小型的应用程序,实际项目中是将登录用户信息存储在关系型数据库中,例如SQL Server 2.身份验证思路: a.用户模型,控制器登陆方法,登录视图 登陆成功,记录会话.然后用户访问其它的方法,每个方法执行前都应该判断会话 问题:太麻烦 b.Controller父类实现了IActionFilter方法: 在执行每个方法之前OnActio