找回密码
 会员注册
查看: 154|回复: 0

ASP.NET MVC使用Authorize过滤器验证用户登录

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962992
发表于 2024-2-29 08:18:12 | 显示全部楼层 |阅读模式

ASP.NET MVC使用Authorize过滤器验证用户登录。Authorize过滤器首先运行在任何其它过滤器或动作方法之前,主要用来做登录验证或者权限验证。

示例:使用Authorize过滤器实现简单的用户登录验证。

1、创建登录控制器LoginController

  1. /// <summary>
  2. /// 登录控制器
  3. /// </summary>
  4. [AllowAnonymous]
  5. public class LoginController : Controller
  6. {
  7. /// <summary>
  8. /// 登录页面
  9. /// </summary>
  10. public ActionResult Index()
  11. {
  12. return View();
  13. }
  14. /// <summary>
  15. /// 登录
  16. /// </summary>
  17. [HttpPost]
  18. public ActionResult Login(string loginName, string loginPwd)
  19. {
  20. if (loginName == "admin" && loginPwd == "123456")
  21. {
  22. //登录成功
  23. Session["LoginName"] = loginName;
  24. return RedirectToAction("Index", "Home");
  25. }
  26. else
  27. {
  28. //登录失败
  29. return RedirectToAction("Index", "Login");
  30. }
  31. }
  32. /// <summary>
  33. /// 注销
  34. /// </summary>
  35. public ActionResult Logout()
  36. {
  37. Session.Abandon();
  38. return RedirectToAction("Index", "Login");
  39. }
  40. }
复制代码

注意:在登录控制器LoginController上添加AllowAnonymous特性,该特性用于标记在授权期间要跳过AuthorizeAttribute的控制器和操作。

2、创建登录页面

  1. @{
  2. ViewBag.Title = "登录页面";
  3. Layout = null;
  4. }
  5. <h2>登录页面</h2>
  6. <form action='@Url.Action("Login","Login")' id="form1" method="post">
  7. 用户:<input type="text" name="loginName" /><br />
  8. 密码:<input type="password" name="loginPwd" /><br />
  9. <input type="submit" value="登录">
  10. </form>
复制代码

效果图:

3、创建主页控制器LoginController

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. //获取当前登录用户
  6. string loginName = Session["LoginName"].ToString();
  7. ViewBag.Message = "当前登录用户:" + loginName;
  8. return View();
  9. }
  10. }
复制代码

 4、创建主页页面

  1. @{
  2. ViewBag.Title = "Index";
  3. Layout = null;
  4. }
  5. <h2>Index</h2>
  6. <h3>@ViewBag.Message</h3>
  7. <a href="@Url.Action("Logout","Login")">注销</a>
复制代码

效果图:

5、创建授权过滤器LoginAuthorizeAttribute类

创建Filter目录,在该目录下创建授权过滤器LoginAuthorizeAttribute类,继承AuthorizeAttribute。

  1. using System.Web.Mvc;
  2. namespace MvcApp.Filter
  3. {
  4. /// <summary>
  5. /// 授权过滤器
  6. /// </summary>
  7. public class LoginAuthorizeAttribute : AuthorizeAttribute
  8. {
  9. public override void OnAuthorization(AuthorizationContext filterContext)
  10. {
  11. //判断是否跳过授权过滤器
  12. if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
  13. || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
  14. {
  15. return;
  16. }
  17. //判断登录情况
  18. if (filterContext.HttpContext.Session["LoginName"] == null || filterContext.HttpContext.Session["LoginName"].ToString()=="")
  19. {
  20. //HttpContext.Current.Response.Write("认证不通过");
  21. //HttpContext.Current.Response.End();
  22. filterContext.Result = new RedirectResult("/Login/Index");
  23. }
  24. }
  25. }
  26. }
复制代码

通常Authorize过滤器也是在全局过滤器上面的,在App_Start目录下的FilterConfig类的RegisterGlobalFilters方法中添加:

  1. using System.Web;
  2. using System.Web.Mvc;
  3. using MvcApp.Filter;
  4. namespace MvcApp
  5. {
  6. public class FilterConfig
  7. {
  8. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  9. {
  10. filters.Add(new HandleErrorAttribute());
  11. //添加全局授权过滤器
  12. filters.Add(new LoginAuthorizeAttribute());
  13. }
  14. }
  15. }
复制代码

Global.asax下的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Optimization;
  7. using System.Web.Routing;
  8. namespace MvcApp
  9. {
  10. public class MvcApplication : System.Web.HttpApplication
  11. {
  12. protected void Application_Start()
  13. {
  14. AreaRegistration.RegisterAllAreas();
  15. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  16. RouteConfig.RegisterRoutes(RouteTable.Routes);
  17. BundleConfig.RegisterBundles(BundleTable.Bundles);
  18. }
  19. }
  20. }
复制代码

 


来源:https://blog.csdn.net/pan_junbiao/article/details/84561056
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:00 , Processed in 0.535137 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表