博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net mvc 自定义全局过滤器 验证用户是否登录
阅读量:4957 次
发布时间:2019-06-12

本文共 2181 字,大约阅读时间需要 7 分钟。

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

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

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

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

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

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

对应的控制器之上即可

过滤器的介绍可以参看

留待后查,同时方便他人

2017.12.9 19:48

 

转载于:https://www.cnblogs.com/ives/p/8012501.html

你可能感兴趣的文章
poj3061
查看>>
linux--多进程进行文件拷贝
查看>>
笔记:git基本操作
查看>>
Gold Smith第一章
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
URL中的特殊字符处理
查看>>
lua 打印一个table的实现
查看>>
canvas动画:气泡上升效果
查看>>
作业 4:词频统计——基本功能
查看>>
java二维数组
查看>>
关于移动端手势滑动和上拉加载下拉刷新简单模拟笔记
查看>>
在使用 CCRenderTexture、shader 绘制几何图元时需要注意的一些细节问题
查看>>
UVA 539 The Settlers of Catan dfs找最长链
查看>>
petshop4 MSDTC 不可用解决
查看>>
[课程设计]Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)
查看>>
exe4J的使用
查看>>
MD5_Util工具类代码
查看>>
深入理解 Java 线程池:ThreadPoolExecutor
查看>>
使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务(转载)
查看>>