現在多數網站必須驗證用戶登陸並利用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(); }
