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)在配置⽂件中添加配置 (5)设置需要验证登录的controller可以直接在controller⽅法上⾯加上 [Authorize] 表⽰只验证次⽅法在FilterConfig中添加配置 (new MvcAuthorizeAttribute());表⽰给项⽬中所有需要验证的⽅法加上验证。在特定⽅法前加[AllowAnonymous]可以跳过验证3.退出登录(清除授权)public static void SingOut(){t();}这种⽅法现在只适合mvc4或以下版本,mvc5中亲测不可⽤,⽅法还在研究中。。。。。

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)在配置⽂件中添加配置 (5)设置需要验证登录的controller可以直接在controller⽅法上⾯加上 [Authorize] 表⽰只验证次⽅法在FilterConfig中添加配置 (new MvcAuthorizeAttribute());表⽰给项⽬中所有需要验证的⽅法加上验证。在特定⽅法前加[AllowAnonymous]可以跳过验证3.退出登录(清除授权)public static void SingOut(){t();}这种⽅法现在只适合mvc4或以下版本,mvc5中亲测不可⽤,⽅法还在研究中。。。。。