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);
        }
    }