zoukankan      html  css  js  c++  java
  • [asp.net mvc]自定义filter

    写在前面

    最近在摸索mvc,在app中的webview中嵌入h5应用,经常需要用到对cookie的读取操作。所以想到通过自定义的filter截取cookie,然后通过在action上面打特性的方式针对需要认证的action进行授权。

    一个例子

    简单的userInfo类

        public class UserInfo
        {
            public string Name { set; get; }
            public string Pwd { set; get; }
        }

    自定义的filter

        public class CookieAuthAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                //当前action的参数名称
                const string actionParameter = "cookieUser";
                HttpContext context = HttpContext.Current;
                if (filterContext.ActionParameters.ContainsKey(actionParameter))
                {
                    HttpCookie nameCookie = context.Request.Cookies["n"];
                    HttpCookie pwdCookie = context.Request.Cookies["p"];
                    filterContext.ActionParameters[actionParameter] = null;
                    if (nameCookie != null && pwdCookie != null)
                    {
                        filterContext.ActionParameters[actionParameter] = new UserInfo() { Name = nameCookie.Value, Pwd = pwdCookie.Value };
                    }
                }
                base.OnActionExecuting(filterContext);
            }
        }

    注册filter

        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new CookieAuthAttribute());
            }
        }
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
            }
        }

    在需要授权的action上面打特性标记

      public class HomeController : Controller
        {
            // GET: Home
            [CookieAuth]
            public ActionResult Index(UserInfo cookieUser)
            {
                if (cookieUser == null)
                {
                    return new EmptyResult();
                }
                else
                {
                    return View(cookieUser);
                }
            }
            public void Login()
            {
                HttpCookie nameCookie = new HttpCookie("n", "wolfy");
                HttpCookie pwdCookie = new HttpCookie("p", "12321312");
                Response.Cookies.Add(nameCookie);
                Response.Cookies.Add(pwdCookie);
            }
        }

    通过Login写入cookie,然后访问Index

    结果

    这样通过cookie来对要访问的action授权就简单多了,只需在需要认证的action上面打上特性 [CookieAuth]就可以了。

  • 相关阅读:
    从Java小白到收获BAT等offer,分享我这两年的经验和感悟
    我的Java秋招面经大合集
    从零基础到拿到网易Java实习offer,我做对了哪些事
    设计模式常见面试知识点总结(Java版)
    如何才能够系统地学习Java并发技术?
    这些喜闻乐见的Java面试知识点,你都掌握了吗?
    Java集合类常见面试知识点总结
    用大白话告诉你 :Java 后端到底是在做什么?
    16-使用Selenium模拟浏览器抓取淘宝商品美食信息
    15-分析Ajax请求并抓取今日头条街拍美图
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/5394187.html
Copyright © 2011-2022 走看看