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());//注意这里的isAuthorizeAttributefilters.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: Homepublic ActionResult Index(){return View();}}

 

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

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

对应的控制器之上即可

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

 

from:https://www.cnblogs.com/ives/p/8012501.html

 

转载于:https://www.cnblogs.com/youmingkuang/p/9062525.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支付宝手机h5网页支付不再提供「继续浏览器付款」按钮了吗

来自圈友的疑惑,记录一下 之前写过一篇「支付宝手机h5支付的文章」,如果下载运行过Demo的小伙伴肯定发现了一个问题 > 「Demo中有显示继续浏览器付款按钮,但自己实际环境并没有」 难道是操作不对? 其实不然,这是两个…

[js] innerHTML与outerHTML有什么区别?

[js] innerHTML与outerHTML有什么区别&#xff1f; <div id"test"><h5>就是喜欢你</h5></div>document.getElementById("test").innerHTML //<h5>就是喜欢你</h5> document.getElementById("test").outHTM…

.NETFramework-Web.Mvc:ViewResult

ylbtech-.NETFramework-Web.Mvc&#xff1a;ViewResult1.程序集 System.Web.Mvc, Version5.2.3.0, Cultureneutral, PublicKeyToken31bf3856ad364e35返回顶部 1、#region 程序集 System.Web.Mvc, Version5.2.3.0, Cultureneutral, PublicKeyToken31bf3856ad364e35 // c:\users\…

ConcurrentHashMap底层原理?

本文为面试必备系列篇&#xff0c;不深入叙述&#xff0c;具体细节可自行查询。 可能会问的问题 1、用过ConcurrentHashMap吗&#xff1f;2、为什么要用ConcurrentHashMap&#xff1f;3、HashMap与HashTable的区别&#xff0c;引出ConcurrentHashMap…4、HashMap在多线程环境下…

[js] js操作节点的方法有哪些?

[js] js操作节点的方法有哪些&#xff1f; 创建节点createElement() 创建一个元素节点createTextNode() 创建一个文本节点createAttribute() 创建一个属性节点createComment() 创建一个注释节点插入节点appendChild() 把节点插入到父节点的末尾insertBefore() 把节点插入到父节…

【刷题】洛谷 P2709 小B的询问

题目描述 小B有一个序列&#xff0c;包含N个1~K之间的整数。他一共有M个询问&#xff0c;每个询问给定一个区间[L..R]&#xff0c;求Sigma(c(i)^2)的值,其中i的值从1到K&#xff0c;其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。 输入输出格式 输入格式&…

支付宝支付-当面付之扫码支付「扫码支付」

前言 支付宝支付—沙箱环境使用支付宝支付-支付宝PC端扫码支付支付宝支付-手机浏览器H5支付支付宝支付-当面付之扫码支付「本文」 当面付包含两种支付方式&#xff1a;商品条形码支付 扫码支付 经过前面两篇PC端扫码支付、手机H5支付&#xff0c;我们可以看到一个共同的特点就…

[js] 写一个格式化时间的方法

[js] 写一个格式化时间的方法 function dateToString(date, format yyyy-MM-dd) {const d new Date(date);let result format;const _config {y: d.getFullYear(),M: d.getMonth() 1, // 月d: d.getDate(), // 日h: d.getHours(), // 小时m: d.getMinutes(), // 分s: d.g…

01: awk常用

1.1 awk基本使用 1、找出当前登录用户数量 [rootlocalhost ~]# w14:09:07 up 48 min, 2 users, load average: 0.00, 0.01, 0.06 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT root :0 :0 204月18 ?xdm? 59.24s 0.04s g…

MybatisCodeHelperNew-2.8.1-191-201插件使用

本文测试环境IDEA_2020.1&#xff0c;文中提供了MacOS用户操作截图 1、文件解压后放置plugs插件目录「Windows」 扫码回复「139」 下载后将文件解压&#xff0c;将压缩包内的 MyBatisCodeHelper-Pro 放入 IDEA 安装目录的 plugins 目录。 2、如果你是MacOS用户「MacOS」 同样找…

[js] pjax和ajax的区别是什么?

[js] pjax和ajax的区别是什么&#xff1f; pjax 是一个 jQuery 插件&#xff0c;它通过 ajax 和 pushState 技术提供了极速的&#xff08;无刷新 ajax 加载&#xff09;浏览体验&#xff0c;并且保持了真实的地址、网页标题&#xff0c;浏览器的后退&#xff08;前进&#xff…

Redis简单案例(四) Session的管理

Redis简单案例(四) Session的管理 原文:Redis简单案例(四) Session的管理负载均衡&#xff0c;这应该是一个永恒的话题&#xff0c;也是一个十分重要的话题。毕竟当网站成长到一定程度&#xff0c;访问量自然也是会跟着增长&#xff0c;这个时候&#xff0c; 一般都会对其进行负…

MacOS中Elasticsearch的安装「借助Homebrew」

1、Homebrew 如果你已经安装过Homebrew了&#xff0c;那么你可以跳过这一步&#xff0c;直接进行Elasticsearch安装步骤&#xff1b; Homebrew是一款MacOS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等很多实用的功能&#xff0c;强烈推荐安装。 请…

[js] 微信小程序实现轨迹回放,微信原生小程序,基于uniapp的小程序?

[js] 微信小程序实现轨迹回放&#xff0c;微信原生小程序&#xff0c;基于uniapp的小程序&#xff1f; 需要写出轨迹拖动&#xff0c;进度条&#xff0c;开始&#xff0c;暂停&#xff0c;结束功能。 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

负载均衡中使用 Redis 实现共享 Session

最近在研究Web架构方面的知识&#xff0c;包括数据库读写分离&#xff0c;Redis缓存和队列&#xff0c;集群&#xff0c;以及负载均衡&#xff08;LVS&#xff09;&#xff0c;今天就来先学习下我在负载均衡中遇到的问题&#xff0c;那就是session共享的问题。 一、负载均衡 负…

Typora中使用Gitee图床

1、前言 之前好友写了一篇「使用gitee作为图床 ,写markdown自动上传文件」&#xff0c;初衷是由于我一直使用的是Typora来写博客「力推」&#xff0c;但之前的版本都不支持图床功能&#xff0c;现在新版本已经有了图床功能了&#xff0c;赶紧入坑。 本篇环境&#xff1a;MacOS…

[js] 异步请求重试策略有哪些呢?

[js] 异步请求重试策略有哪些呢&#xff1f; 重试次数、重试时间间隔等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

【NOIP2017模拟6.25】小W的动漫

题目 小W最近迷上了日本动漫&#xff0c;每天都有无数部动漫的更新等着他去看&#xff0c;所以他必须将所有的动漫排个顺序&#xff0c;当然&#xff0c;虽然有无数部动漫&#xff0c;但除了1号动漫&#xff0c;每部动漫都有且仅有一部动漫是它的前传&#xff08;父亲&#xff…

用Elasticsearch代替数据库存储日志方式

之前的项目中一直使用的是数据库表记录用户操作日志的&#xff0c;但随着时间的推移&#xff0c;数据库log单表是越来越大「不考虑删除」&#xff0c;再加上近期项目中需要用到Elasticsearch&#xff0c;所以干脆把这些用户日志迁移到ES上来了。 环境&#xff1a;SpringBoot2.2…

[js] 写一个方法实现promise失败后自动重试

[js] 写一个方法实现promise失败后自动重试 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&…