ASP.NET MVC 实现统一登录验证
2018-02-07 22:50
796 查看
1.先写个主页面
2.登录页面
View页的登录
3.一个登录验证的过滤器CheckLoginAttribute
4.一个跳过登录验证的自定义属性类SkipCheckLoginAttribute
5.把SkipCheckLoginAttribute添加到全局过滤器中
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace WebApplication4.Controllers { public class HomeController : Controller { public ActionResult Index() { string name = ""; //Session里面有值,就表示已经登录 if (Session["User"]!= null) { name = Session["User"].ToString(); } //Session=null就跳转到登录页面 else { return RedirectToAction("Login", "Login"); } return Content("欢迎【"+name+"】登录"); } } }
2.登录页面
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication4.Filters; namespace WebApplication4.Controllers { //登录页加上此特性,不需要做登录验证,要不加会陷入死循环,导致浏览器崩溃 [SkipCheckLoginAttribute] public class LoginController : Controller { // GET: Login [HttpGet] public ActionResult Login() { return View(); } [HttpPost] public ActionResult Login(FormCollection forms) { string name = forms["name"]; string pwd = forms["pwd"]; if(name=="Admin" && pwd == "Admin") { Session["User"] = name; } return RedirectToAction("Index","Home"); } } }
View页的登录
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Login</title> </head> <body> <div> @using (Html.BeginForm("Login", "Login", FormMethod.Post)) { <input type="text" name="name" /><br /> <input type="text" name="pwd" /><br /> <input type="submit" value="登录" /> } </div> </body> </html>
3.一个登录验证的过滤器CheckLoginAttribute
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication4.Filters { using System.Web.Mvc; /// <summary> /// 统一登陆验证 /// </summary> public class CheckLoginAttribute:ActionFilterAttribute { //重写ActionFilterAttribute中的OnActionExecuted方法,表示在执行Action之前执行此方法 public override void OnActionExecuted(ActionExecutedContext filterContext) { //判断Action方法的Control是否跳过登录验证 if (filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(SkipCheckLoginAttribute), false)) { return; } //判断Action方法是否跳过登录验证 if (filterContext.ActionDescriptor.IsDefined(typeof(SkipCheckLoginAttribute), false)) { return; } if (filterContext.HttpContext.Session["User"] == null) { //跳转方法1: filterContext.HttpContext.Response.Redirect("/Login/Login"); //跳转方法2: ViewResult view = new ViewResult(); //指定要返回的完整视图名称 view.ViewName = "~/View/Login/Login.cshtml"; } } } }
4.一个跳过登录验证的自定义属性类SkipCheckLoginAttribute
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication4.Filters { //要继承所有属性的基类Attribute public class SkipCheckLoginAttribute:Attribute { } }
5.把SkipCheckLoginAttribute添加到全局过滤器中
using System.Web; using System.Web.Mvc; using WebApplication4.Filters; namespace WebApplication4 { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); //添加自定义过滤器 filters.Add(new CheckLoginAttribute()); } } }
相关文章推荐
- Asp.net mvc验证用户登录之Forms实现-转
- Asp.net mvc验证用户登录之Forms实现
- Asp.net mvc验证用户登录之Forms实现详解
- ASP.NET MVC使用Filter实现页面验证与授权
- asp.net继承page类重写方法 实现最基本的用户登录验证 权限验证等
- ASP.NET中如何实现FORM验证登录
- 通过扩展改善ASP.NET MVC的验证机制[实现篇]
- 通过扩展改善ASP.NET MVC的验证机制[实现篇]
- ASP.net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- asp.net MVC中如何用Membership类和自定义的数据库进行登录验证
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
- JQuery遮罩层登录界面实现(AJAX+ASP.NET实现登录验证,源码下载)
- ASP.NET MVC 使用Filter过滤器 验证用户登录状态
- 使用 ExtJS 实现 ASP.NET MVC 2 客户端验证
- asp.net -mvc框架复习(11)-基于三层架构与MVC实现完整的用户登录
- ASP.NET MVC实现网站验证码功能(上)
- ASP.NET MVC 3.0前后台统一验证类UniValidate,附源码
- asp.net mvc 简单实现一个账号只能在一个地方登录
- ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证