zoukankan      html  css  js  c++  java
  • C#_MVC3之使用Authorize简单的验证登录(一)

    第一步,自定义 AuthorizeAttribute。

    public class CustomAuthorizeAttribute : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                if (null == filterContext)
                    throw new Exception(“filterContext is null”);
                var user = filterContext.HttpContext.Session[ConstStr.SessionUserName];
                
    #if DEBUG
                return;
    #endif
    
                // 用户为空,赋予Guest
                if (null == user||string.Empty==user.ToString())
                {
    
                    //未登录
                    filterContext.HttpContext.Response.Write(Com.ConstStr.DWZTimeOut);
                    filterContext.HttpContext.Response.End();
                    return;
                }
                //权限验证代码
    
               //略…..
            }
        }

    小技巧:如果你想在调试模式下跳过登录验证可以加上下面这段代码,当你以Debug编译,启动调试时就会执行”return”。这是预处理命令。

    #if DEBUG             return; #endif

    • 第二步,新建 BaseController继承Controller

    [CustomAuthorize]
    public class BaseController: Controller
    {
    }

    注意加粗的这个CustomAuthorize 这就是我们前面自定义的CustomAuthorizeAttribute ,在类前面加上这个属性后,其它需要进行权限控制的Controller都继承这个BaseController

    默认继承后的Controller 的Action都需要验证后才能访问。

    • 第三部,处理无需验证的特例Action

    可能有人会问,我有的Action和Controller 不需要登录验证怎么做特殊处理?

    Controller好办,不继承BaseController,继承Controller就好了。

    Action 如果不需要验证,需要做两步处理:第一,所在的Controller不继承BaseController。第二给每个Action分别设置权限验证的设定。如下面的用户的Controller

    public class UserController : Controller
    {
        public ActionResult Login()  //login 不需要登录验证,所以没加CustomAuthorize
        {
            return View(“~/Views/Account/user/login.cshtml”);
        }
        //
        // GET: /User/
        [CustomAuthorize]
        public ActionResult Index()
        {
    
            return View();
        }
    
        //
        // GET: /User/Details/5
        [CustomAuthorize]
        public ActionResult Details(int id)
        {
            return View();
        }
    
        //
        // GET: /User/Create
        [CustomAuthorize]
        public ActionResult Create()
        {
            return View(“~/Views/Account/user/create.cshtml”);
        }
    
    }

    方法2.

    public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
        {
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                if (httpContext == null)
                {
                    throw new ArgumentNullException("HttpContext");
                }
                if (!httpContext.User.Identity.IsAuthenticated)
                {
                    return false;
                }
    
                string userName =  httpContext.User.Identity.Name
                ///根据用户名从数据库中获取用户,实现自定义验证。
    
                return false;
            }
    
            public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
            {
                ///
    
                base.OnAuthorization(filterContext);
            }
        }
  • 相关阅读:
    CodeForces 1025G Company Acquisitions
    Luogu P4271 [USACO18FEB]New Barns P
    Luogu P1625 求和
    SP1772 Find The Determinant II
    CodeForces 1408G Clusterization Counting
    CodeForces 1420E Battle Lemmings
    设计模式——工厂模式
    设计模式——适配器模式
    rabbitMQ centos7 的安装
    dubbo spring 的使用
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3788224.html
Copyright © 2011-2022 走看看