gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、用户登录  验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码。  引入命名空间  using System.Web.Security;  。

复制代码代码如下

Users ModelUser = new Users() { ID = 10000, Name = UserName, UserName = UserName, PassWord = PassWord, Roles = "admin" };//用户实体  string UserData = SerializeHelper.Instance.JsonSerialize<Users>(ModelUser);//序列化用户实体  //保存身份信息,参数说明可以看提示  FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddHours(12), false, UserData);  HttpCookie Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(Ticket));//加密身份信息,保存至Cookie  Response.Cookies.Add(Cookie);  。

现在身份信息就保存到cookie中了,如果有场景需要用到当前用户的用户ID或者别的信息的时候该怎么办呢?  那么,我们重新在cookie中获取身份信息,然后解密,再反序列化成用户实体就OK了。  。

复制代码代码如下

/// <summary>  /// 获取用户登录信息  /// </summary>  /// <returns></returns>  public Users GetUser()  {  if (HttpContext.Current.Request.IsAuthenticated)//是否通过身份验证  {  HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];//获取cookie  FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(authCookie.Value);//解密  return SerializeHelper.Instance.JsonDeserialize<Users>(Ticket.UserData);//反序列化  }  return null;  }  。

2、权限验证  这里用到的是MVC中的action拦截器(重写OnActionExecuting),在action执行之前会先运行拦截器中的代码。这里同时可以身份验证是否过期。  。

复制代码代码如下

/// <summary>  /// 权限验证  /// </summary>  public class AuthAttribute : ActionFilterAttribute  {  /// <summary>  /// 角色名称  /// </summary>  public string Code { get; set; }  /// <summary>  /// 验证权限(action执行前会先执行这里)  /// </summary>  /// <param name="filterContext"></param>  public override void OnActionExecuting(ActionExecutingContext filterContext)  {  //如果存在身份信息  if (!HttpContext.Current.User.Identity.IsAuthenticated)  {  ContentResult Content = new ContentResult();  Content.Content = string.Format("<script type='text/javascript'>alert('请先登录!');window.location.href='{0}';</script>", FormsAuthentication.LoginUrl);  filterContext.Result = Content;  }  else  {  string[] Role = CheckLogin.Instance.GetUser().Roles.Split(',');//获取所有角色  if (!Role.Contains(Code))//验证权限  {  //验证不通过  ContentResult Content = new ContentResult();  Content.Content = "<script type='text/javascript'>alert('权限验证不通过!');history.go(-1);</script>";  filterContext.Result = Content;  }  }  }  }  。

那么在action中怎么去调用呢?这里贴出HomeController中的代码来看下。  。

复制代码代码如下

public class HomeController : BaseController  {  [AuthAttribute(Code = "admin")]//验证通过(这个action只允许admin查看)  public ActionResult Index()  {  Users ModelUser = CheckLogin.Instance.GetUser();  return View(ModelUser);  }  [AuthAttribute(Code = "user")]//验证不通过  public ActionResult Index2()  {  return View();  }  [AuthAttribute(Code = "admin")]//验证通过,发生异常  public ActionResult Index3()  {  return View();  }  }  。

这样就可以把权限控制到action了。  3、异常处理  上面HomeController并不是继承Controller,而是继承我们自己定义的一个BaseController,那么我们来看看BaseController中有写什么东西?  。

复制代码代码如下

[ErrorAttribute]  public class BaseController : Controller  {  //所有Controller都继承BaseController,则都会进行异常捕获  }  。

在这里BaseController只做了一件事情,就是增加了一个ErrorAttribute的错误拦截器,那么只要是在Controller中发生的异常都会在ErrorAttribute中进行处理,你可以记录到数据库等操作。那么我们看看ErrorAttribute是怎么工作的。  。

复制代码代码如下

/// <summary>  /// 错误日志(Controller发生异常时会执行这里)  /// </summary>  public class ErrorAttribute : ActionFilterAttribute, IExceptionFilter  {  /// <summary>  /// 异常  /// </summary>  /// <param name="filterContext"></param>  public void OnException(ExceptionContext filterContext)  {  //获取异常信息,入库保存  Exception Error = filterContext.Exception;  string Message = Error.Message;//错误信息  string Url = HttpContext.Current.Request.RawUrl;//错误发生地址  filterContext.ExceptionHandled = true;  filterContext.Result = new RedirectResult("/Error/Show/");//跳转至错误提示页面  }  }  。

在这里可以把异常捕获,然后跳转到友好的错误提示页面。在MVC中几个操作就可以这样简单的完成了,关于代码在文章下面会提供下载。  实例代码  作者:LyIng.Net 。

最后此篇关于Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码的文章就讲到这里了,如果你想了解更多关于Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com