关于.net中的身份认证(AuthorizeAttribute)的问题

关于.net中的身份认证(AuthorizeAttribute)的问题

2023年6月20日发(作者:)

关于.net中的⾝份认证(AuthorizeAttribute)的问题

  引⾔    新公司当初⾯试的时候问了我很多⽤户验证的问题,这⾥就把我的对于验证的想法写⼀下,希望可以有⼀个系统的学习记录。  ⼀、如何验证    B/S结构的请求是http请求,个⼈理解的http请求有两个特点:1、⽆状态 2、短连接 (下篇⽂章会说⼀下我个⼈对于http连接的想法)。所以⼀个请求是否是我们系统的⽤户我们⼀般是⽤Session和Cookie来判断的。请求⼜可以分为两种,⼀种是页⾯的请求,⼀种是数据API的ajax请求。所以⼀个判断请求是否是系统⽤户可以这么写     public void HasLogin(HttpContextBase httpContext) { //判断⽤户登录信息是否存在,这⾥是⽤Session,有的⽤Cookie(加密) if (n["UserInfo"] == null) {

//如果是AJAX的API请求 if (Request()) { //这边处理错误API请求反馈,⼀般是反馈错误提⽰ } else { //这边是页⾯请求,如果是未登录的话直接跳转到登录页⾯ } }

}  ⼆、如何使⽤    有了验证的逻辑之后就可以通过重写.net⾃⼰的AuthorizeAttribute类来实现⽤户⾝份验证了。AuthorizeAttribute类有两个重要的⽅法:AuthorizeCore和HandleUnauthorizedRequest。其中AuthorizeCore函数是⽤来判断⼀个请求是否通过⽤户验证,它的返回结果是⼀个bool。HandleUnauthorizedRequest函数则是在AuthorizeCore返回结果是false时会调⽤的函数。源代码如下所⽰    从图中可以看出当AuthorizeCore函数结果为false时,就会触发HandleUnauthorizedRequest函数来处理验证失败。所以我们可以⾃定义⼀个AuthorizeAttribute类的⼦类并重写上⾯的两个⽅法。    protected override bool AuthorizeCore(HttpContextBase httpContext) { if (n["UserInfo"] == null) { return false; } return true; } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { //如果是Ajax请求 if (Request()) { = new JsonResult { Data = new { ResultCode = ion, ResultMess = "请求⽤户未登录!" } }; } else { //处理Url请求 //验证不通过,直接跳转到相应页⾯,注意:如果不使⽤以下跳转,则会继续执⾏Action⽅法

= new RedirectResult("/Home/Index"); } }  三、添加AuthorizeAttribute过滤     我们⾃定义个AthorizeAttribute已经实现了,接下来就是在控制器上⾯实现了。具体实现⽅法有三种    1、Controller层级添加    

    2、Action层级添加        3、全局添加    

    (这个过滤器配置可以在中看到)  四、取消过滤      有些页⾯,例如登录页⾯、登录请求的时候⽤户是肯定还没有登录的,这个时候如果我⽤了全局添加的话,⽤户岂不是永远⽆法登录了?那么为了使某些特定的⽅法可以不⽤验证过滤可以在特定Action、Controller上⾯添加以下抬头        AllowAonymous表⽰⼀个特性,该特性⽤于标记在授权期间要跳过 izeAttribute 的控制器和操作     总结    由于本⼈也是才疏学浅,改⽂章也是为了记录学习。如果⽂中有不⾜或者错误之处还请⼤家指出。谢谢

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687250008a33.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信