C#_MVC3之使用Authorize简单的验证登录(一)

时间:2022-01-15 18:36:05

第一步,自定义 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);
}
}