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