asp.net mvc 自定义全局过滤器 验证用户是否登录

Posted senfanxie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net mvc 自定义全局过滤器 验证用户是否登录相关的知识,希望对你有一定的参考价值。

一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面

对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高了

对于这样的需求,有一个比较好的解决方案,通过自定义一个全局的过滤器来完成这个操作

这里我们需要实现AuthorizeAttribute特性来完成对用户身份的验证

首先给出自定义的类,通过这个类来实现对用户身份的判断,通过重写HandleUnauthorizedRequest函数

来完成用户验证失败的处理操作,在AuthorizeCore方法中判断用户是否已经登录过网站

public class isAuthorizeAttribute : AuthorizeAttribute
    
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        
            //根据需要添加
            filterContext.HttpContext.Response.Redirect("/student/login/login?errorMSG=3");

        
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        
            //根据需要添加,将自动根据返回值判断用户是否通过验证
            //true:通过
            //false:未通过
            bool result = false;
            if (httpContext.Session["Username"] != null)
                result = true;
            return result;
        
    

为了便于后期修改,将注册过滤器的操作提取出来并保存在App_Start目录中,具体类的定义如下,此处的isAuthorizeAttribute是上面定义的过滤器类

public class FilterConfig
    
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        
            filters.Add(new HandleErrorAttribute());
            //注意这里的isAuthorizeAttribute
            filters.Add(new isAuthorizeAttribute());
        
        

至此,我们完成了需要的准备工作,然后在全局的Global.asax文件中注册我们的过滤器类,由于我们已经将需要的操作包装在了FilterConfig.RegisterGlobalFilters中,

所有这里只需要通过调用这个函数便能实现我们需要的注册的功能,代码示例如下

protected void Application_Start()
        
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            //添加自定义全局登录过滤器
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        

运行之前的注意事项

操作到这里我们完成了需要的所有工作,但是对于一个网站的运行机制来说,首页以及用户登录的页面、忘记密码、注册的页面

都是不应该进行验证的,所有我们需要对这个页面进行相应的操作,使得顺利通过验证

这里我们可以使用[AllowAnonymous]这个特性来使得页面顺利运行

示例如下

[AllowAnonymous]
    public class HomeController : Controller
    
        // GET: Home
        public ActionResult Index()
        
            return View();
        
    

对所有的不需要验证的控制器进行设置特性后,我们便可以运行项目进行测试了,这里我们描述的是需要大量验证用户是否登录的页面,

如果遇到只有少数几个页面需要验证的情况,那我们只需要向使用基本的过滤器一样的方式来使用即可,将我们自定的过滤器特性加到

对应的控制器之上即可

过滤器的介绍可以参看http://www.cnblogs.com/ives/p/filter.html

留待后查,同时方便他人

以上是关于asp.net mvc 自定义全局过滤器 验证用户是否登录的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC5 自定义身份验证

在 Asp.Net MVC 中验证自定义用户类

ASP.NET MVC 处理区域中的请求验证异常

ASP.Net MVC:如何自定义验证消息显示

ASP.NET MVC 4 混合认证模式

如何在 ASP.NET MVC 5 中实现自定义身份验证