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

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

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

这里我们需要实现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

留待后查,同时方便他人

2017.12.9 19:48

asp.net mvc 自定义全局过滤器 验证用户是否登录的更多相关文章

  1. Asp.net mvc 自定义全局的错误事件HandleErrorAttribute无效

    Asp.net mvc 自定义全局的错误事件HandleErrorAttribute,结果无效, 原因: 1.没有在RegisterGlobalFilters 里面添加或者你要的位置添加. 2.你把这 ...

  2. 一、Core基于MVC的全局过滤器验证

    一.Core基于MVC的过滤器验证 1.添加一个过滤器.在Startup 中ConfigureServices方法里添加一个Filters 即我们自己授权代码类. public void Config ...

  3. .Net Core MVC全局过滤器验证是否需要登录

    1.新增全局登录过滤器LoginCheckAttribute 1 public class LoginCheckAttribute: ActionFilterAttribute 2 { 3 publi ...

  4. MVC 自定义特性(验证用户登录session是否已经过期)

    新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...

  5. ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

    前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...

  6. Asp.Net MVC<五>:过滤器

    ControllerActionInvoker在执行过程中除了利用ActionDescriptor完成对目标Action方法本身的执行外,还会执行相关过滤器(Filter).过滤器采用AOP的设计,它 ...

  7. asp.net mvc 三种过滤器

    前几天面试遇到这个问题,发现不是很了解,学习了下,这里记录下来 经常需要将用户的操作记录到日志中,或者是验证用户是否登录了网站, 面对这样的需求,以前的操作是自定义一个统一的全局方法,然后做处理, 在 ...

  8. mvc自定义全局异常处理

    异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...

  9. ASP.NET MVC学习之过滤器篇(2)

    下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成 ...

随机推荐

  1. 【C编程基础】C程序常用函数

    基础知识 1.const const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. ; 或 ; //在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再改变它了 ...

  2. cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)

    B. Mike and Children time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. WPFの无边框窗体以及控件的移动

    对于WPF,一旦隐藏了标题栏,就无法移动,这时候需要重写移动方法,下面列举常见的三种方式方式. 方式一:重写OnMouseLeftButtonDown protected override void ...

  4. (5)Python字典

  5. centos7下安装docker(17.1docker监控---sysdig)

    sysdig是一个轻量级的系统监控工具,同时原生支持容器.通过sysdig我们可以近距离观察linux操作系统和容器的行为 Linux上有很多常用的监控工具,比如;strace,tcpdump,hto ...

  6. 经典Python进阶文档 真的很棒

    https://docs.pythontab.com/interpy/args_kwargs/README/

  7. Python:Day28 同步锁

    同步锁: Python不是有一把锁了吗?为什么还要加锁? Python解释器的GIL的作用是同一时刻只有一个线程被CPU执行,而同步锁的作用同一时刻只有一个线程对锁定代码块操作 如果不加锁,当多个线程 ...

  8. 【vue】在移动端使用better-scroll 实现滚动效果

    安装依赖:(c)npm install better-scroll --save 引入: import BScroll from 'better-scroll' 格式: var obj = new B ...

  9. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  10. docker 3 docker安装

    centos docker安装 docker支持以下centos版本: centos 7 (64-bit) centos 6.5 (64-bit)或更高的版本 前提条件 目前,centos仅发行版中的 ...