c# MVC利用AuthorizeAttribute验证用户是否登录
现在多数网站必须验证用户登陆并利用Session或者Cookie存储用户登陆后才能进行操作,
如果存储过期或者没用登陆则自动返回到登陆界面,而MVC自带AuthorizeAttribute属性进行验证。
1、 用户登陆
输入用户登录名和密码验证成功后,利用Session存储登陆用户信息
HttpContext.Current.Session["LoginUser"] = userDTO;//userDTO登陆用户实体类
2、创建AccountManagerment类下GetCurrentUser()方法,获取Session中存储的用户信息,返回实体类UserDTO
public class AccountManagerment { /// <summary> /// 获取当前用户信息 /// </summary> /// <returns></returns> public static UserDTO GetCurrentUser() { var session = HttpContext.Current.Session["LoginUser"]; if (session == null) return new UserDTO(); return session as UserDTO; } }
3、创建AccountAuthorizeAttribute类,继承AuthorizeAttribute,并重写OnAuthorization方法
/// <summary> /// 验证用户是否登录 /// </summary> public class AccountAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext authorizationContext) { var httpContext = authorizationContext.HttpContext; var request = httpContext.Request; ActionResult actionResult = null; string message = string.Empty; var user = AccountManagerment.GetCurrentUser(); if (user.rolepermissionDTO == null) { String url = request.RawUrl; UrlHelper urlHelper = new UrlHelper(request.RequestContext); //利用Action 指定的操作名称、控制器名称和路由值生成操作方法的完全限定 URL。 string returnUrl = urlHelper.Action("Login", "Home", new { returnUrl = "", message = message }); actionResult = new RedirectResult(returnUrl); } authorizationContext.Result = actionResult; } }
4、将属性[AccountAuthorize]置于整个Controller之上。当用户有操作时,进入控制器前都会先验证用户是否登录,或者存储用户信息过期从而返回登录界面。
[AccountAuthorize] public ActionResult Index(string title, string dp, string end, int id = 1) { return view(); }