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

        }

    }

 

 

你可能感兴趣的:(mvc)