2023年6月20日发(作者:)
.NETmvc实现登录1.检测未登录跳转登录页⾯重写AuthorizeAttribute类这⾥主要⽤到两个⽅法:HandleUnauthorizedRequest :处理未能授权的 HTTP 请求。AuthorizeCore:通过上下⽂检查⽤户是否授权代码: using System;using c;using ;using ;using ;using g;using ty;namespace { public class MvcAuthorizeAttribute : AuthorizeAttribute { // //
摘要: //
处理未能授权的 HTTP
请求。 // //
参数: // filterContext: //
封装有关使⽤ izeAttribute
的信息。filterContext
对象包括控制器、HTTP
上下⽂、请求上下⽂、操作结果和路由数据。 protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { var routeValue = new RouteValueDictionary { { "Controller", "Home"}, { "Action", "Login"} }; = new RedirectToRouteResult(routeValue); } //
摘要: //
重写时,提供⼀个⼊⼝点⽤于进⾏⾃定义授权检查。 // //
参数: // httpContext: // HTTP
上下⽂,它封装有关单个 HTTP
请求的所有 HTTP
特定的信息。 // //
返回结果: //
如果⽤户已经过授权,则为 true;否则为 false。 // //
异常: // T:ntNullException: // httpContext
参数为 null。 protected override bool AuthorizeCore(HttpContextBase httpContext) { //调⽤基类的次⽅法检查如果⽤户已经过授权,则为 true;否则为 false。 if (izeCore(httpContext)) { return true; } else { return false; } } }
}2.处理登录请求(1)创建登录基类public class LoginBase { public int ID { get; set; } public string UserName { get; set; } public string UserCode { get; set; } public string AuthToken { get; set; } }(2)登录判断函数[HttpPost] public JsonResult doLogin() { bool bSuccess = false; string strMes = ; var username = ["username"].ToString(); var Password = ["Password"].ToString(); var Db = B(); //⽤户名密码检查 if (OrEmpty(username) || OrEmpty(Password)) { bSuccess = false; strMes = "登陆失败,⽤户名或者密码为空"; return Json(new { success = bSuccess, message = strMes }); } //⽤户名密码验证 string strSql = (@"select * from db_users where username='{0}' and password='{1}'", username, 5(Password)); var result = (strSql).QuerySingle<_users>(); //验证密码 if (result == null || OrEmpty(me)) { bSuccess = false; strMes = "登陆失败,⽤户名或者密码错误"; return Json(new { success = bSuccess, message = strMes }); } //调⽤框架中的登陆机制 var loginer = new LoginerBase() { username = me, ID= }; var effectiveHours = figInt("LoginEffectiveHours", 8); if (["remember"] == null) { effectiveHours = 0; } (loginer, 60 * effectiveHours); //登陆后处理 //strSql = (@"update db_users set LoginCount=LoginCount+1,LastLoginDate='{0}' where ID='{1}'", ng("yyyy-MM-dd HH:mm:ss"), ); //(strSql).Execute(); bSuccess = true; strMes = "登录成功,页⾯跳转中……"; return Json(new { success = bSuccess, message = strMes }); }(3)登录授权函数 public static void SignIn(LoginerBase loginer, int expireMin) { var loginName = me; ken = GetToken(loginName); var data = izeObject(loginer); //创建⼀个FormsAuthenticationTicket,它包含登录名以及额外的⽤户数据。 var ticket = new FormsAuthenticationTicket(2, loginName, , s(1), true, data); //加密Ticket,变成⼀个加密的字符串。 var cookieValue = t(ticket); //根据加密结果创建登录Cookie var cookie = new HttpCookie(ookieName, cookieValue) { HttpOnly = true, Secure = eSSL, Domain = Domain, Path = ookiePath }; if (expireMin > 0) s = utes(expireMin); var context = t; if (context == null) throw new InvalidOperationException(); //写登录Cookie (); (cookie); }将cookies写⼊context中上下⽂,就可以判断是否授权成功了(4)在配置⽂件中添加配置
2023年6月20日发(作者:)
.NETmvc实现登录1.检测未登录跳转登录页⾯重写AuthorizeAttribute类这⾥主要⽤到两个⽅法:HandleUnauthorizedRequest :处理未能授权的 HTTP 请求。AuthorizeCore:通过上下⽂检查⽤户是否授权代码: using System;using c;using ;using ;using ;using g;using ty;namespace { public class MvcAuthorizeAttribute : AuthorizeAttribute { // //
摘要: //
处理未能授权的 HTTP
请求。 // //
参数: // filterContext: //
封装有关使⽤ izeAttribute
的信息。filterContext
对象包括控制器、HTTP
上下⽂、请求上下⽂、操作结果和路由数据。 protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { var routeValue = new RouteValueDictionary { { "Controller", "Home"}, { "Action", "Login"} }; = new RedirectToRouteResult(routeValue); } //
摘要: //
重写时,提供⼀个⼊⼝点⽤于进⾏⾃定义授权检查。 // //
参数: // httpContext: // HTTP
上下⽂,它封装有关单个 HTTP
请求的所有 HTTP
特定的信息。 // //
返回结果: //
如果⽤户已经过授权,则为 true;否则为 false。 // //
异常: // T:ntNullException: // httpContext
参数为 null。 protected override bool AuthorizeCore(HttpContextBase httpContext) { //调⽤基类的次⽅法检查如果⽤户已经过授权,则为 true;否则为 false。 if (izeCore(httpContext)) { return true; } else { return false; } } }
}2.处理登录请求(1)创建登录基类public class LoginBase { public int ID { get; set; } public string UserName { get; set; } public string UserCode { get; set; } public string AuthToken { get; set; } }(2)登录判断函数[HttpPost] public JsonResult doLogin() { bool bSuccess = false; string strMes = ; var username = ["username"].ToString(); var Password = ["Password"].ToString(); var Db = B(); //⽤户名密码检查 if (OrEmpty(username) || OrEmpty(Password)) { bSuccess = false; strMes = "登陆失败,⽤户名或者密码为空"; return Json(new { success = bSuccess, message = strMes }); } //⽤户名密码验证 string strSql = (@"select * from db_users where username='{0}' and password='{1}'", username, 5(Password)); var result = (strSql).QuerySingle<_users>(); //验证密码 if (result == null || OrEmpty(me)) { bSuccess = false; strMes = "登陆失败,⽤户名或者密码错误"; return Json(new { success = bSuccess, message = strMes }); } //调⽤框架中的登陆机制 var loginer = new LoginerBase() { username = me, ID= }; var effectiveHours = figInt("LoginEffectiveHours", 8); if (["remember"] == null) { effectiveHours = 0; } (loginer, 60 * effectiveHours); //登陆后处理 //strSql = (@"update db_users set LoginCount=LoginCount+1,LastLoginDate='{0}' where ID='{1}'", ng("yyyy-MM-dd HH:mm:ss"), ); //(strSql).Execute(); bSuccess = true; strMes = "登录成功,页⾯跳转中……"; return Json(new { success = bSuccess, message = strMes }); }(3)登录授权函数 public static void SignIn(LoginerBase loginer, int expireMin) { var loginName = me; ken = GetToken(loginName); var data = izeObject(loginer); //创建⼀个FormsAuthenticationTicket,它包含登录名以及额外的⽤户数据。 var ticket = new FormsAuthenticationTicket(2, loginName, , s(1), true, data); //加密Ticket,变成⼀个加密的字符串。 var cookieValue = t(ticket); //根据加密结果创建登录Cookie var cookie = new HttpCookie(ookieName, cookieValue) { HttpOnly = true, Secure = eSSL, Domain = Domain, Path = ookiePath }; if (expireMin > 0) s = utes(expireMin); var context = t; if (context == null) throw new InvalidOperationException(); //写登录Cookie (); (cookie); }将cookies写⼊context中上下⽂,就可以判断是否授权成功了(4)在配置⽂件中添加配置
发布评论