简单自定义授权过滤器

Posted qiao298

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单自定义授权过滤器相关的知识,希望对你有一定的参考价值。

过滤器的根本也是Attribute,大家可以F12从从元数据中可以看到,最后还是继承了一下Attribute,跟特性还是脱不了干系.

授权过滤器要继承System.Web.Mvc命名空间下AuthorizeAttribute类,指定用户访问就是利用了Users属性,并由基类帮我们验证,只放指定Users用户通过;要实现自定义验证,重写下面的OnAuthorization和AuthorizeCore方法就可以了

下面是一个简单的授权,用户登录完之后才可以查看购物车(Cookie 中数据最好要加密,不要问我为什么,因为会泄露)

 

废话不多说,直接上代码简单粗暴

 

刚刚接触,各方面了解不是很多,有什么错误希望各位大佬可以提出来

 

技术图片
 1 //页面
 2         public ActionResult Login()
 3         
 4             return View();
 5         
 6         /// <summary>
 7         /// 登录
 8         /// </summary>
 9         /// <param name="name">用户名</param>
10         /// <param name="pwd">密码</param>
11         /// <param name="yzm">验证码</param>
12         /// <returns>登录完之后把指定的数据存到Cookie,以便使用</returns>
13         public int UserLogin(string name, string pwd,string yzm)
14         
15             //判断验证码是否正确
16             if(Session["ValidateCode"].ToString().ToLower()!=yzm.ToString().ToLower())
17             
18                 return -2;
19             
20             #region Cookie
21             //实例化Cookie
22             HttpCookie cookie = new HttpCookie("User");
23             //设置一个单独的Cookie值
24             cookie.Value = name;
25             //获取当前时间
26             DateTime dtNow = DateTime.Now;
27             //设置多久之后Cookie失效
28             TimeSpan tsMinute = new TimeSpan(0, 0, 5, 0);
29             //拼接起来
30             cookie.Expires = dtNow + tsMinute;
31             //给指定的Cookie添加数据
32             cookie["name"] = name;
33             //添加保存到浏览器的Cookie
34             Response.Cookies.Add(cookie);
35 
36             #endregion
37             //md5加密
38             pwd = BLL.Md5Helper.Md5(pwd);
39             int Usid = 0;
40             var i = BLL.UserBLL.Login(name,pwd,out Usid);
41             return i;
42         
控制器登录
技术图片
 1 /// <summary>
 2     /// 购物车授权
 3     /// 从Cookie中把数据拿出来,判断是否正确,然后授权
 4     /// 然后可以根据这个数据进行一系列操作,比如登录头像,购物车什么的
 5     /// </summary>
 6     public class CartAttribute: AuthorizeAttribute
 7     
 8         //认证并授权
 9         protected override bool AuthorizeCore(HttpContextBase httpContext)
10         
11             //获取Cookie里的值
12             string name = "";
13             //创建一个httpcookie类型的   获取cookies的集合
14             System.Web.HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies["User"];
15             if (cookie != null)
16             
17                 name = cookie["name"].ToString();
18                 return true;
19             
20             return false;
21         
22         //授权失败后要执行的
23         protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
24         
25             filterContext.HttpContext.Response.Redirect("/Commodity/NotLog");
26             //base.HandleUnauthorizedRequest(filterContext);
27         
28     
授权过滤器

以上是关于简单自定义授权过滤器的主要内容,如果未能解决你的问题,请参考以下文章

自定义授权过滤器在运行时出现异常

Spring Security 自定义身份验证过滤器和授权

自定义授权过滤器在 ASP.NET Core 3 中不起作用

在 JSF 项目中使用授权过滤器进行自定义身份验证

MVC 自定义过滤器(Filter)实现路由控制异常处理授权处理(获取客户端信息)

如何将自定义授权过滤器添加到ASP网络核心中非控制器的方法?