无锡用友erp软件营销服务机构

您的位置: >
关于快速身份验证开通会员消费密码的通知
尊敬的东方万里行会员,您好!
&&&&&& 为便捷开通会员消费密码,保障会员账户使用安全,自日起,东方万里行会员可登录东航官网()、&东方万里行&会员门户网站、东方航空APP、东航移动官网()通过验证会员姓名、身份证号码、开户银行、银行卡号、银行预留手机号码等身份信息快速便捷开通会员消费密码。
&&&&&& 您可访问&东方万里行&网上商城兑换万种热卖精品(支持积分+现金灵活支付),或访问东航官网兑换机票。
中国东方航空35035人阅读
MVC技术(29)
前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权限验证来实现Web系统登录,Mvc前端权限校验以及WebApi服务端的访问校验功能。
1. Web Form认证介绍
Web应用的访问方式因为是基于浏览器的Http地址请求,所以需要验证用户身份的合法性。目前常见的方式是Form认证,其处理逻辑描述如下:
1. 用户首先要在登录页面输入用户名和密码,然后登录系统,获取合法身份的票据,再执行后续业务处理操作;
2. 用户在没有登录的情况下提交Http页面访问请求,如果该页面不允许匿名访问,则直接跳转到登录页面;
3. 对于允许匿名访问的页面请求,系统不做权限验证,直接处理业务数据,并返回给前端;
4. 对于不同权限要求的页面Action操作,系统需要校验用户角色,计算权限列表,如果请求操作在权限列表中,则正常访问,如果不在权限列表中,则提示“未授权的访问操作”到异常处理页面。
2. WebApi 服务端Basic 方式验证
WebApi服务端接收访问请求,需要做安全验证处理,验证处理步骤如下:
1. 如果是合法的Http请求,在Http请求头中会有用户身份的票据信息,服务端会读取票据信息,并校验票据信息是否完整有效,如果满足校验要求,则进行业务数据的处理,并返回给请求发起方;
2. 如果没有票据信息,或者票据信息不是合法的,则返回“未授权的访问”异常消息给前端,由前端处理此异常。
3. 登录及权限验证流程
流程处理步骤说明:
1. 用户打开浏览器,并在地址栏中输入页面请求地址,提交;
2. 浏览器解析Http请求,发送到Web服务器;Web服务器验证用户请求,首先判断是否有登录的票据信息;
3. 用户没有登录票据信息,则跳转到登录页面;
4. 用户输入用户名和密码信息;
5. 浏览器提交登录表单数据给Web服务器;
6. Web服务需要验证用户名和密码是否匹配,发送api请求给api服务器;
7. api用户账户服务根据用户名,读取存储在数据库中的用户资料,判断密码是否匹配;
1)如果用户名和密码不匹配,则提示密码错误等信息,然该用户重新填写登录资料;
2)如果验证通过,则保存用户票据信息;
8. 接第3步,如果用户有登录票据信息,则跳转到用户请求的页面;
9. 验证用户对当前要操作的页面或页面元素是否有权限操作,首先需要发起api服务请求,获取用户的权限数据;
10. api用户权限服务根据用户名,查找该用户的角色信息,并计算用户权限列表,封装为Json数据并返回;
11. 当用户有权限操作页面或页面元素时,跳转到页面,并由页面Controller提交业务数据处理请求到api服务器;
& &如果用户没有权限访问该页面或页面元素时,则显示“未授权的访问操作”,跳转到系统异常处理页面。
12. api业务服务处理业务逻辑,并将结果以Json 数据返回;
13. 返回渲染后的页面给浏览器前端,并呈现业务数据到页面;
14. 用户填写业务数据,或者查找业务数据;
15. 当填写或查找完业务数据后,用户提交表单数据;
16. 浏览器脚本提交get,post等请求给web服务器,由web服务器再次解析请求操作,重复步骤2的后续流程;
17. 当api服务器验证用户身份是,没有可信用户票据,系统提示“未授权的访问操作”,跳转到系统异常处理页面。
4. Mvc前端代码示例
4.1 用户登录AccountController
&span&style=&font-size:&18&&&&/span&&span&style=&font-size:&14&&public&class&AccountController&:&Controller&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&ActionResult&Login(string&returnUrl)&&&&&&&&&&{&&&&&&&&&&&&&&ViewBag.ReturnUrl&=&returnU&&&&&&&&&&&&&&return&View();&&&&&&&&&&}&&&&&&&&&&&&[HttpPost]&&&&&&&&&&public&ActionResult&Logon(LoginUser&loginUser,&string&returnUrl)&&&&&&&&&&{&&&&&&&&&&&&&&string&strUserName&=&loginUser.UserN&&&&&&&&&&&&&&string&strPassword&=&loginUser.P&&&&&&&&&&&&&&var&accountModel&=&new&AccountModel();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(accountModel.ValidateUserLogin(strUserName,&strPassword))&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&if&(Url.IsLocalUrl(returnUrl))&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&accountModel.CreateLoginUserTicket(strUserName,&strPassword);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&accountModel.GetUserAuthorities(strUserName);&&&&&&&&&&&&&&&&&&&&&&&&return&new&RedirectResult(returnUrl);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&return&RedirectToAction(&Index&,&&Home&);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&throw&new&ApplicationException(&无效登录用户!&);&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[HttpPost]&&&&&&&&&&public&ActionResult&Logout()&&&&&&&&&&{&&&&&&&&&&&&&&var&accountModel&=&new&AccountModel();&&&&&&&&&&&&&&accountModel.Logout();&&&&&&&&&&&&&&&&return&RedirectToAction(&Login&,&&Account&);&&&&&&&&&&}&&&&&&}&/span&&&
&span&style=&font-size:18&&&&/span&&span&style=&font-size:14&&public&class&AccountController&:&Controller&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&ActionResult&Login(string&returnUrl)&&&&&&&&&&{&&&&&&&&&&&&&&ViewBag.ReturnUrl&=&returnU&&&&&&&&&&&&&&return&View();&&&&&&&&&&}&&&&&&&&&&&&[HttpPost]&&&&&&&&&&public&ActionResult&Logon(LoginUser&loginUser,&string&returnUrl)&&&&&&&&&&{&&&&&&&&&&&&&&string&strUserName&=&loginUser.UserN&&&&&&&&&&&&&&string&strPassword&=&loginUser.P&&&&&&&&&&&&&&var&accountModel&=&new&AccountModel();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(accountModel.ValidateUserLogin(strUserName,&strPassword))&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&if&(Url.IsLocalUrl(returnUrl))&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&accountModel.CreateLoginUserTicket(strUserName,&strPassword);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&accountModel.GetUserAuthorities(strUserName);&&&&&&&&&&&&&&&&&&&&&&&&return&new&RedirectResult(returnUrl);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&return&RedirectToAction(&Index&,&&Home&);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&throw&new&ApplicationException(&无效登录用户!&);&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[HttpPost]&&&&&&&&&&public&ActionResult&Logout()&&&&&&&&&&{&&&&&&&&&&&&&&var&accountModel&=&new&AccountModel();&&&&&&&&&&&&&&accountModel.Logout();&&&&&&&&&&&&&&&&return&RedirectToAction(&Login&,&&Account&);&&&&&&&&&&}&&&&&&}&/span&&&
4.2 用户模型AccountModel
&span&style=&font-size:&14&&public&class&AccountModel&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&void&CreateLoginUserTicket(string&strUserName,&string&strPassword)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&FormsAuthenticationTicket&ticket&=&new&FormsAuthenticationTicket(1,&strUserName,&DateTime.Now,&DateTime.Now.AddMinutes(90),&&&&&&&&&&&&&&&&&&true,&string.Format(&{0}:{1}&,&strUserName,&strPassword),&FormsAuthentication.FormsCookiePath);&&&&&&&&&&&&&&&&string&ticString&=&FormsAuthentication.Encrypt(ticket);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HttpContext.Current.Response.Cookies.Add(new&HttpCookie(FormsAuthentication.FormsCookieName,&ticString));&&&&&&&&&&&&&&FormsAuthentication.SetAuthCookie(strUserName,&true);&&&&&&&&&&&&&&HttpContext.Current.Session[&USER_LOGON_TICKET&]&=&ticS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&string[]&roles&=&ticket.UserData.Split(',');&&&&&&&&&&&&&&IIdentity&identity&=&new&FormsIdentity(ticket);&&&&&&&&&&&&&&IPrincipal&principal&=&new&GenericPrincipal(identity,&roles);&&&&&&&&&&&&&&HttpContext.Current.User&=&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&string&GetUserAuthorities(string&userName)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&string&jsonAuth&=&&[{\&Controller\&:&\&SampleController\&,&\&Actions\&:\&Apply,Process,Complete\&},&{\&Controller\&:&\&Product\&,&\&Actions\&:&\&List,Get,Detail\&}]&;&&&&&&&&&&&&&&var&userAuthList&=&ServiceStack.Text.JsonSerializer.DeserializeFromString(jsonAuth,&typeof(UserAuthModel[]));&&&&&&&&&&&&&&HttpContext.Current.Session[&USER_AUTHORITIES&]&=&userAuthL&&&&&&&&&&&&&&&&return&jsonA&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&bool&ValidateUserLogin(string&name,&string&password)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&void&Logout()&&&&&&&&&&{&&&&&&&&&&&&&&FormsAuthentication.SignOut();&&&&&&&&&&}&&&&&&}&/span&&&
&span&style=&font-size:14&&public&class&AccountModel&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&void&CreateLoginUserTicket(string&strUserName,&string&strPassword)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&FormsAuthenticationTicket&ticket&=&new&FormsAuthenticationTicket(1,&strUserName,&DateTime.Now,&DateTime.Now.AddMinutes(90),&&&&&&&&&&&&&&&&&&true,&string.Format(&{0}:{1}&,&strUserName,&strPassword),&FormsAuthentication.FormsCookiePath);&&&&&&&&&&&&&&&&string&ticString&=&FormsAuthentication.Encrypt(ticket);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HttpContext.Current.Response.Cookies.Add(new&HttpCookie(FormsAuthentication.FormsCookieName,&ticString));&&&&&&&&&&&&&&FormsAuthentication.SetAuthCookie(strUserName,&true);&&&&&&&&&&&&&&HttpContext.Current.Session[&USER_LOGON_TICKET&]&=&ticS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&string[]&roles&=&ticket.UserData.Split(',');&&&&&&&&&&&&&&IIdentity&identity&=&new&FormsIdentity(ticket);&&&&&&&&&&&&&&IPrincipal&principal&=&new&GenericPrincipal(identity,&roles);&&&&&&&&&&&&&&HttpContext.Current.User&=&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&string&GetUserAuthorities(string&userName)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&string&jsonAuth&=&&[{\&Controller\&:&\&SampleController\&,&\&Actions\&:\&Apply,Process,Complete\&},&{\&Controller\&:&\&Product\&,&\&Actions\&:&\&List,Get,Detail\&}]&;&&&&&&&&&&&&&&var&userAuthList&=&ServiceStack.Text.JsonSerializer.DeserializeFromString(jsonAuth,&typeof(UserAuthModel[]));&&&&&&&&&&&&&&HttpContext.Current.Session[&USER_AUTHORITIES&]&=&userAuthL&&&&&&&&&&&&&&&&return&jsonA&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&bool&ValidateUserLogin(string&name,&string&password)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&internal&void&Logout()&&&&&&&&&&{&&&&&&&&&&&&&&FormsAuthentication.SignOut();&&&&&&&&&&}&&&&&&}&/span&&&
4.3 控制器基类WebControllerBase
&span&style=&font-size:&14&&&&&&&&&&&&&&&&&&&&[Authorize]&&&&&&public&abstract&class&WebControllerBase&:&Controller&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&ApiUrl&&&&&&&&&&{&&&&&&&&&&&&&&get;&&&&&&&&&&&&&&protected&set;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&UserAuthModel[]&UserAuthList&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserAuthL&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&UserLoginTicket&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserLoginT&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&}&/span&&&
&span&style=&font-size:14&&&&&&&&&&&&&&&&&&&&[Authorize]&&&&&&public&abstract&class&WebControllerBase&:&Controller&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&ApiUrl&&&&&&&&&&{&&&&&&&&&&&&&&get;&&&&&&&&&&&&&&protected&set;&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&UserAuthModel[]&UserAuthList&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserAuthL&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&UserLoginTicket&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserLoginT&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&}&/span&&&
4.4 权限属性RequireAuthorizationAttribute
&span&style=&font-size:&14&&&&&&&&&&&&&&&&&&&&public&class&RequireAuthorizeAttribute&:&AuthorizeAttribute&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&UserAuthModel[]&UserAuthList&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserAuthL&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&UserLoginTicket&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserLoginT&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&public&override&void&OnAuthorization(AuthorizationContext&filterContext)&&&&&&&&&&{&&&&&&&&&&&&&&base.OnAuthorization(filterContext);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&identity&=&filterContext.HttpContext.User.I&&&&&&&&&&&&&&if&(identity.IsAuthenticated)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&var&actionName&=&filterContext.ActionDescriptor.ActionN&&&&&&&&&&&&&&&&&&var&controllerName&=&filterContext.ActionDescriptor.ControllerDescriptor.ControllerN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(HasActionQulification(actionName,&controllerName,&identity.Name))&&&&&&&&&&&&&&&&&&&&&&if&(!string.IsNullOrEmpty(UserLoginTicket))&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Cookies[FormsAuthentication.FormsCookieName].Value&=&UserLoginT&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Account/Login&,&false);&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Home/UnAuthorized&,&true);&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&attr&=&filterContext.ActionDescriptor.GetCustomAttributes(true).OfType&AllowAnonymousAttribute&();&&&&&&&&&&&&&&&&&&bool&isAnonymous&=&attr.Any(a&=&&a&is&AllowAnonymousAttribute);&&&&&&&&&&&&&&&&&&&&if&(!isAnonymous)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Account/Login&,&true);&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&private&bool&HasActionQulification(string&actionName,&string&controllerName,&string&userName)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&auth&=&UserAuthList.FirstOrDefault(a&=&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&bool&rightAction&=&false;&&&&&&&&&&&&&&&&&&bool&rightController&=&a.Controller&==&controllerN&&&&&&&&&&&&&&&&&&if&(rightController)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&string[]&actions&=&a.Actions.Split(',');&&&&&&&&&&&&&&&&&&&&&&rightAction&=&actions.Contains(actionName);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&return&rightA&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&(auth&!=&null);&&&&&&&&&&}&&&&&&}&/span&&&
&span&style=&font-size:14&&&&&&&&&&&&&&&&&&&&public&class&RequireAuthorizeAttribute&:&AuthorizeAttribute&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&UserAuthModel[]&UserAuthList&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserAuthL&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&string&UserLoginTicket&&&&&&&&&&{&&&&&&&&&&&&&&get&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&return&AuthorizedUser.Current.UserLoginT&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&public&override&void&OnAuthorization(AuthorizationContext&filterContext)&&&&&&&&&&{&&&&&&&&&&&&&&base.OnAuthorization(filterContext);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&identity&=&filterContext.HttpContext.User.I&&&&&&&&&&&&&&if&(identity.IsAuthenticated)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&var&actionName&=&filterContext.ActionDescriptor.ActionN&&&&&&&&&&&&&&&&&&var&controllerName&=&filterContext.ActionDescriptor.ControllerDescriptor.ControllerN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(HasActionQulification(actionName,&controllerName,&identity.Name))&&&&&&&&&&&&&&&&&&&&&&if&(!string.IsNullOrEmpty(UserLoginTicket))&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Cookies[FormsAuthentication.FormsCookieName].Value&=&UserLoginT&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Account/Login&,&false);&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Home/UnAuthorized&,&true);&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&attr&=&filterContext.ActionDescriptor.GetCustomAttributes(true).OfType&AllowAnonymousAttribute&();&&&&&&&&&&&&&&&&&&bool&isAnonymous&=&attr.Any(a&=&&a&is&AllowAnonymousAttribute);&&&&&&&&&&&&&&&&&&&&if&(!isAnonymous)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&filterContext.HttpContext.Response.Redirect(&~/Account/Login&,&true);&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&private&bool&HasActionQulification(string&actionName,&string&controllerName,&string&userName)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&auth&=&UserAuthList.FirstOrDefault(a&=&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&bool&rightAction&=&false;&&&&&&&&&&&&&&&&&&bool&rightController&=&a.Controller&==&controllerN&&&&&&&&&&&&&&&&&&if&(rightController)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&string[]&actions&=&a.Actions.Split(',');&&&&&&&&&&&&&&&&&&&&&&rightAction&=&actions.Contains(actionName);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&return&rightA&&&&&&&&&&&&&&});&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&(auth&!=&null);&&&&&&&&&&}&&&&&&}&/span&&&
4.5 业务Controller示例
&span&style=&font-size:&14&&public&class&ProductController&:&WebControllerBase&&{&&&&&&&&&&&&[AllowAnonymous]&&&&&&&&&&public&ActionResult&Query()&&&&&&&&&&{&&&&&&&&&&&&&&return&View(&ProductQuery&);&&&&&&&&&&}&&&&&&&&&&&&[HttpGet]&&&&&&&&&&&&&&&&&&&&[RequireAuthorize]&&&&&&&&&&public&ActionResult&Detail(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&var&cookie&=&HttpContext.Request.C&&&&&&&&&&&&&&string&url&=&base.ApiUrl&+&&/Get/&&+&&&&&&&&&&&&&&&HttpClient&httpClient&=&HttpClientHelper.Create(url,&base.UserLoginTicket);&&&&&&&&&&&&&&&&&&&&&&&&&&&&string&result&=&httpClient.GetString();&&&&&&&&&&&&&&var&model&=&JsonSerializer.DeserializeFromString&Product&(result);&&&&&&&&&&&&&&ViewData[&PRODUCT_ADD_OR_EDIT&]&=&&E&;&&&&&&&&&&&&&&return&View(&ProductForm&,&model);&&&&&&&&&&}&&}&/span&&&
&span&style=&font-size:14&&public&class&ProductController&:&WebControllerBase&&{&&&&&&&&&&&&[AllowAnonymous]&&&&&&&&&&public&ActionResult&Query()&&&&&&&&&&{&&&&&&&&&&&&&&return&View(&ProductQuery&);&&&&&&&&&&}&&&&&&&&&&&&[HttpGet]&&&&&&&&&&&&&&&&&&&&[RequireAuthorize]&&&&&&&&&&public&ActionResult&Detail(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&var&cookie&=&HttpContext.Request.C&&&&&&&&&&&&&&string&url&=&base.ApiUrl&+&&/Get/&&+&&&&&&&&&&&&&&&HttpClient&httpClient&=&HttpClientHelper.Create(url,&base.UserLoginTicket);&&&&&&&&&&&&&&&&&&&&&&&&&&&&string&result&=&httpClient.GetString();&&&&&&&&&&&&&&var&model&=&JsonSerializer.DeserializeFromString&Product&(result);&&&&&&&&&&&&&&ViewData[&PRODUCT_ADD_OR_EDIT&]&=&&E&;&&&&&&&&&&&&&&return&View(&ProductForm&,&model);&&&&&&&&&&}&&}&/span&&&
5. &WebApi 服务端代码示例
5.1 控制器基类ApiControllerBase
&&&&&&&&[BasicAuthentication]&&public&abstract&class&ApiControllerBase&:&ApiController&&{&&&&}&&
&&&&&&&&[BasicAuthentication]&&public&abstract&class&ApiControllerBase&:&ApiController&&{&&&&}&&
5.2 权限属性BaseAuthenticationAttribute
&&&&&&&&&&&&&&&&&&public&class&BasicAuthenticationAttribute&:&ActionFilterAttribute&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&override&void&OnActionExecuting(HttpActionContext&actionContext)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(actionContext.Request.Headers.Authorization&!=&null)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&encryptTicket&=&actionContext.Request.Headers.Authorization.P&&&&&&&&&&&&&&&&&&if&(ValidateUserTicket(encryptTicket))&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&actionContext.Response&=&new&HttpResponseMessage(HttpStatusCode.Unauthorized);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&bool&isRquired&=&(WebConfigurationManager.AppSettings[&WebApiAuthenticatedFlag&].ToString()&==&&true&);&&&&&&&&&&&&&&&&&&if&(isRquired)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&attr&=&actionContext.ActionDescriptor.GetCustomAttributes&AllowAnonymousAttribute&().OfType&AllowAnonymousAttribute&();&&&&&&&&&&&&&&&&&&&&&&bool&isAnonymous&=&attr.Any(a&=&&a&is&AllowAnonymousAttribute);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(isAnonymous)&&&&&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&actionContext.Response&=&new&HttpResponseMessage(HttpStatusCode.Unauthorized);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&private&bool&ValidateUserTicket(string&encryptTicket)&&&&&&&&&&{&&&&&&&&&&&&&&var&userTicket&=&FormsAuthentication.Decrypt(encryptTicket);&&&&&&&&&&&&&&var&userTicketData&=&userTicket.UserD&&&&&&&&&&&&&&&&string&userName&=&userTicketData.Substring(0,&userTicketData.IndexOf(&:&));&&&&&&&&&&&&&&string&password&=&userTicketData.Substring(userTicketData.IndexOf(&:&)&+&1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&}&&&&&&}&&
&&&&&&&&&&&&&&&&&&public&class&BasicAuthenticationAttribute&:&ActionFilterAttribute&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&override&void&OnActionExecuting(HttpActionContext&actionContext)&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(actionContext.Request.Headers.Authorization&!=&null)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&encryptTicket&=&actionContext.Request.Headers.Authorization.P&&&&&&&&&&&&&&&&&&if&(ValidateUserTicket(encryptTicket))&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&actionContext.Response&=&new&HttpResponseMessage(HttpStatusCode.Unauthorized);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&else&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&bool&isRquired&=&(WebConfigurationManager.AppSettings[&WebApiAuthenticatedFlag&].ToString()&==&&true&);&&&&&&&&&&&&&&&&&&if&(isRquired)&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&attr&=&actionContext.ActionDescriptor.GetCustomAttributes&AllowAnonymousAttribute&().OfType&AllowAnonymousAttribute&();&&&&&&&&&&&&&&&&&&&&&&bool&isAnonymous&=&attr.Any(a&=&&a&is&AllowAnonymousAttribute);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(isAnonymous)&&&&&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&&&actionContext.Response&=&new&HttpResponseMessage(HttpStatusCode.Unauthorized);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&base.OnActionExecuting(actionContext);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&private&bool&ValidateUserTicket(string&encryptTicket)&&&&&&&&&&{&&&&&&&&&&&&&&var&userTicket&=&FormsAuthentication.Decrypt(encryptTicket);&&&&&&&&&&&&&&var&userTicketData&=&userTicket.UserD&&&&&&&&&&&&&&&&string&userName&=&userTicketData.Substring(0,&userTicketData.IndexOf(&:&));&&&&&&&&&&&&&&string&password&=&userTicketData.Substring(userTicketData.IndexOf(&:&)&+&1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&}&&&&&&}&&
5.3 api服务Controller实例
public&class&ProductController&:&ApiControllerBase&&{&&&&&&&&&&&&[HttpGet]&&&&&&&&&&public&object&Find(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&return&ProductServiceInstance.Find(2);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&[HttpGet]&&&&&&&&&&[AllowAnonymous]&&&&&&&&&&public&Product&Get(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&var&headers&=&Request.H&&&&&&&&&&&&&&var&p&=&ProductServiceInstance.GetById&Product,&EPProduct&(long.Parse(id));&&&&&&&&&&&&&&if&(p&==&null)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&throw&new&HttpResponseException(new&HttpResponseMessage(HttpStatusCode.BadRequest)&&&&&&&&&&&&&&&&&&&&Content&=&new&StringContent(&id3&not&found&),&ReasonPhrase&=&&product&id&not&exist.&&});&&&&&&&&&&&&&&}&&&&&&&&&&&&&&return&p;&&&&&&&&&&}&&}&&
public&class&ProductController&:&ApiControllerBase&&{&&&&&&&&&&&&[HttpGet]&&&&&&&&&&public&object&Find(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&return&ProductServiceInstance.Find(2);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&[HttpGet]&&&&&&&&&&[AllowAnonymous]&&&&&&&&&&public&Product&Get(string&id)&&&&&&&&&&{&&&&&&&&&&&&&&var&headers&=&Request.H&&&&&&&&&&&&&&var&p&=&ProductServiceInstance.GetById&Product,&EPProduct&(long.Parse(id));&&&&&&&&&&&&&&if&(p&==&null)&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&throw&new&HttpResponseException(new&HttpResponseMessage(HttpStatusCode.BadRequest)&&&&&&&&&&&&&&&&&&&&Content&=&new&StringContent(&id3&not&found&),&ReasonPhrase&=&&product&id&not&exist.&&});&&&&&&&&&&&&&&}&&&&&&&&&&&&&&return&p;&&&&&&&&&&}&&}&&
6. 其它配置说明
6.1 Mvc前端Web.Config 配置
&&&&&&&debug=&true&&targetFramework=&4.5&&&&&&&&&&&&&&&&&&&&assembly=&System.Web.Http.Data.Helpers,&Version=4.0.0.0,&Culture=neutral,&PublicKeyToken=31bf&&&&&&&&&&&&&&&&&&&&&&&targetFramework=&4.5&&&&&&&&&mode=&Forms&&&&&&&&&&loginUrl=&~/Account/Login&&defaultUrl=&~/Home/Index&&protection=&All&&timeout=&90&&name=&.AuthCookie&&&&&&&&&&&&&&validationKey=&3FFA12388DDF585BA5D35E7BC87E3F0AB47FBBEBD12240DD3BEA2BEAEC4ABA213F22AD27E8FAD77DCFEE908D193A17C1FC8DCE51B71A4AE54920&&decryptionKey=&ECB6A3AF9ABBF3F16E8B0B13CCEE538EBBA97D0BB&&validation=&SHA1&&decryption=&AES&&&&&&
&&&&&&&debug=&true&&targetFramework=&4.5&&&&&&&&&&&&&&&&&&&&assembly=&System.Web.Http.Data.Helpers,&Version=4.0.0.0,&Culture=neutral,&PublicKeyToken=31bf&&&&&&&&&&&&&&&&&&&&&&&targetFramework=&4.5&&&&&&&&&mode=&Forms&&&&&&&&&&loginUrl=&~/Account/Login&&defaultUrl=&~/Home/Index&&protection=&All&&timeout=&90&&name=&.AuthCookie&&&&&&&&&&&&&&validationKey=&3FFA12388DDF585BA5D35E7BC87E3F0AB47FBBEBD12240DD3BEA2BEAEC4ABA213F22AD27E8FAD77DCFEE908D193A17C1FC8DCE51B71A4AE54920&&decryptionKey=&ECB6A3AF9ABBF3F16E8B0B13CCEE538EBBA97D0BB&&validation=&SHA1&&decryption=&AES&&&&&&
machineKey节点配置,是应用于对用户ticket数据加密和解密。
6.2 WebApi服务端Web.Config配置
&&&&&&&&validationKey=&3FF112388DDF585BA5D35E7BC87E3F0AB47FBBEBD12240DD3BEA2BEAEC4ABA213F22AD27E8FAD77DCFEE908D193A17C1FC8DCE51B71A4AE54920&&decryptionKey=&ECB6A3AF9ABBF3F16E8B0B13CCEE538EBBA97D0BB&&validation=&SHA1&&decryption=&AES&&&&&&
&&&&&&&&validationKey=&3FF112388DDF585BA5D35E7BC87E3F0AB47FBBEBD12240DD3BEA2BEAEC4ABA213F22AD27E8FAD77DCFEE908D193A17C1FC8DCE51B71A4AE54920&&decryptionKey=&ECB6A3AF9ABBF3F16E8B0B13CCEE538EBBA97D0BB&&validation=&SHA1&&decryption=&AES&&&&&&
machineKey节点配置,是应用于对用户ticket数据加密和解密。
Web系统的用户登录及页面操作权限验证在处理逻辑上比较复杂,需要考虑到Form认证、匿名访问,Session和Cookie存储,以及Session和Cookie的过期处理,本文实现了整个权限验证框架的基本功能,供系统架构设计人员以及Web开发人员参考。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:489447次
积分:5851
积分:5851
排名:第3664名
原创:153篇
转载:97篇
评论:93条
(7)(3)(4)(3)(1)(1)(5)(1)(4)(3)(11)(6)(2)(1)(5)(3)(5)(6)(10)(12)(11)(5)(1)(13)(2)(8)(2)(1)(16)(13)(4)(2)(1)(11)(3)(3)(10)(5)(5)(1)(16)(13)(11)

我要回帖

更多关于 erp销售 的文章

 

随机推荐