我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NET MVC授权过滤器如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NET MVC授权过滤器如何使用

这篇文章主要介绍“ASP.NET MVC授权过滤器如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET MVC授权过滤器如何使用”文章能帮助大家解决问题。

过滤器

过滤器(Filter)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,并不是每个请求都会响应内容,只有那些有特定权限的用户才能响应特定的内容。过滤器理论上有以下功能:

  • 判断登录与否或者用户权限。

  • 决策输出缓存。

  • 防盗链。

  • 防蜘蛛。

  • 本地化与国际化设置。

  • 实现动态Action(做权限管理系统经常用到)。

1、使用方式一

第一种方法是在Controller或Action上面直接使用Authorize特性,不设置特性的任何属性。看下面的截图:

ASP.NET MVC授权过滤器如何使用

从上面的截图中可以看出:第一个名为Index的Action方法是没有过滤的,任何身份的请求都可以通过。只需要在浏览器的URL地址栏里面输入:http://localhost:**/Admin/Index就能得到对应的视图响应,效果如下:

ASP.NET MVC授权过滤器如何使用

而第二个名为Welcome的Action方法上面使用了Authorize特性,表示这是一个只处理那些通过身份验证的URL的请求,页面请求效果如下:

ASP.NET MVC授权过滤器如何使用

这时可以看到报错了:提示只有通过身份验证的用户才能访问请求所需的资源。

这种报错页面很不友好,一般这种情况都是跳转到登录页面让用户进行登录,所以对程序进行如下的改造。

1.1、添加登录页面

新建Account控制器,并新建两个Action方法,代码如下:

using MVCAuthorizeFilterDemo.Models;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Security;namespace MVCAuthorizeFilterDemo.Controllers{    public class AccountController : Controller    {        // GET: Account        public ActionResult Index()        {            return View();        }        /// <summary>        /// 显示登录视图        /// </summary>        /// <returns></returns>        public ActionResult LogOn()        {            LogOnViewModel model = new LogOnViewModel();            return View(model);        }        /// <summary>        /// 处理用户点击登录提交回发的表单        /// </summary>        /// <param name="model"></param>        /// <returns></returns>        [HttpPost]        public ActionResult LogOn(LogOnViewModel model)        {            //只要输入的用户名和密码一样就过            if (model.UserName.Trim() == model.Password.Trim())             {                // 判断是否勾选了记住我                if (model.RememberMe)                {                    //2880分钟有效期的cookie                    FormsAuthentication.SetAuthCookie(model.UserName, true);                }                            else                {                    //会话cookie                    FormsAuthentication.SetAuthCookie(model.UserName, false);                 }                 // 跳转到Account控制器的Welcome方法                return RedirectToAction("Welcome", "Admin");            }            else            {                return View(model);            }                        }    }}

LogOnViewModel是用户登录实体类,定义如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Web;namespace MVCAuthorizeFilterDemo.Models{    // <summary>    /// 用户登录实体类    /// </summary>    public class LogOnViewModel    {        /// <summary>        /// 用户名        /// </summary>        [DisplayName("用户名")]        public string UserName { get; set; }        /// <summary>        /// 密码        /// </summary>        [DisplayName("密码")]        public string Password { get; set; }        /// <summary>        /// 记住我        /// </summary>        [DisplayName("记住我")]        public bool RememberMe { get; set; }    }}

LogOn视图页代码如下:

@model MVCAuthorizeFilterDemo.Models.LogOnViewModel@{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>LogOn</title></head><body>    @using (Html.BeginForm())    {        @Html.AntiForgeryToken()        <div class="form-horizontal">            <h5>登录</h5>            <hr />            @Html.ValidationSummary(true)            <div class="form-group">                @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })                <div class="col-md-10">                    @Html.EditorFor(model => model.UserName)                    @Html.ValidationMessageFor(model => model.UserName)                </div>            </div>            <div class="form-group">                @Html.LabelFor(model => model.Password, new { @class = "control-label col-md-2" })                <div class="col-md-10">                    @Html.EditorFor(model => model.Password)                    @Html.ValidationMessageFor(model => model.Password)                </div>            </div>            <div class="form-group">                @Html.LabelFor(model => model.RememberMe, new { @class = "control-label col-md-2" })                <div class="col-md-10">                    @Html.EditorFor(model => model.RememberMe)                    @Html.ValidationMessageFor(model => model.RememberMe)                </div>            </div>            <div class="form-group">                <div class="col-md-offset-2 col-md-10">                    <input type="submit" value="登录" class="btn btn-default" />                </div>            </div>        </div>    }</body></html>
1.2、修改配置文件

在上面的案例中,如果权限认证没有通过会显示错误页面,这种情况下要跳转到登录页面让用户进行登录,所以要再配置文件里面配置登录页面,如果没有通过身份认证就会跳转到配置文件里面配置的登录页面,配置文件代码如下:

<!--配置登录页面--><authentication mode="Forms">   <forms loginUrl="~/Account/LogOn" timeout="2880" /></authentication>
1.3、测试

改造完以后重新生成,在URL地址栏里面输入:http://localhost:39175/Admin/Index,页面显示效果如下:

ASP.NET MVC授权过滤器如何使用

在访问Welcome方法,输入:http://localhost:39175/Admin/Welcome,页面显示效果如下:

ASP.NET MVC授权过滤器如何使用

从上图中可以看出虽然访问的是Welcome这个Action,但是并没有直接返回相应的视图,而是被带到了登录页面,这是因为Welcome这个Action上面使用了Authorize特性,拒绝了所有未登录用户的访问。

上面既然拒绝了未验证用户的访问,那么就登录下通过验证。看上面LogOn里面的代码就知道,只要输入的用户名和密码相同就可以登录,都输入“admin”,这时页面显示如下:

ASP.NET MVC授权过滤器如何使用

截图表明已经通过验证并且得到了Welcome这个Action的相应。按F12打开控制台,会发现这时多了一个名为“.ASPXAUTH”的Cookie,这个是默认名称,在配置文件里面可以修改。如果登录的时候勾选了记住我,那么此Cookie的过期时间就是在配置文件里面定义的2880分钟。

ASP.NET MVC授权过滤器如何使用

2、使用方式二

权限过滤器的第二种用法:基于用户授权和基于角色授权。

基于角色授权就是给Authorize特性的Roles属性赋值,多个角色可以使用逗号分隔。基于用户授权就是给Authorize特性的Users属性赋值,如果是多个用户也可以使用逗号分隔。验证不通过时也可以通过web.config进行配置。

继续基于上面的案例进行改造,只允许登录名为“a”、“b”的两个用户可以访问Welcome方法,改造后的代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace MVCAuthorizeFilterDemo.Controllers{    public class AdminController : Controller    {        // GET: Admin        public ActionResult Index()        {            return View();        }        /// <summary>        /// 使用方式一:直接使用Authorize特性,特性不添加任何属性        /// </summary>        /// <returns></returns>        //[Authorize]        //public ActionResult Welcome()        //{        //    return View();        //}        /// <summary>        /// 使用方式二:使用Authorize特性,添加Users属性,只能a、b登录用户才可以访问        /// </summary>        /// <returns></returns>        [Authorize(Users ="a,b")]        public ActionResult Welcome()        {            return View();        }    }}

再次访问http://localhost:39175/Admin/Welcome,然后用admin登录,这时会发现页面不会跳转到Welcome方法对应的页面,还是显示登录页。如果换成a或者b登录就会显示Welcome对应的页面了,这说明设置的Users属性起作用了。

在上面的案例中,给Authorize特性的Users属性赋值就可以控制可以访问的用户了,从操作性上来说这样控制Action的访问权限还是很方便的。但是如果项目很大,用户对应的角色和权限变化比较大,每次变化都要修改代码来重新标注Action显然不合适。这时该如何解决呢?这就可以用MVC提供的自定义过滤器了。

关于“ASP.NET MVC授权过滤器如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NET MVC授权过滤器如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ASP.NET MVC授权过滤器如何使用

这篇文章主要介绍“ASP.NET MVC授权过滤器如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET MVC授权过滤器如何使用”文章能帮助大家解决问题。过滤器过滤器(Filter)
2023-06-29

jQuery如何使用过滤器过滤多属性

这篇文章给大家分享的是有关jQuery如何使用过滤器过滤多属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用过滤器过滤多属性//This precision-based approached can be u
2023-06-27

vue中过滤器如何使用

这篇文章主要介绍“vue中过滤器如何使用”,在日常操作中,相信很多人在vue中过滤器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中过滤器如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-29

如何使用Ranger给HDFS授权

这篇文章给大家介绍如何使用Ranger给HDFS授权,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。主要介绍如何使用Ranger 给HDFS 授权。文档概述1.介绍CDP7.1.3 中Ranger 中HDFS 默认权限策
2023-06-19

网关Gateway过滤器如何使用

这篇“网关Gateway过滤器如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“网关Gateway过滤器如何使用”文章吧
2023-07-02

ASP.NET Core MVC中如何使用Tag Helper组件

这篇文章主要介绍ASP.NET Core MVC中如何使用Tag Helper组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Tag Helper 组件 - 简介在 ASP.NET Core 2 还为我们带来了一个
2023-06-29

Vue中如何使用filters过滤器

这篇文章主要为大家展示了“Vue中如何使用filters过滤器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何使用filters过滤器”这篇文章吧。Vue.js 允许我们自定义过滤器,
2023-06-29

MySQL如何使用授权命令grant

本文实例,运行于 MySQL 5.0 及以上版本。 MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant s
2022-05-11

ASP.NET MVC如何使用Identity增删改查用户

这篇文章主要讲解了“ASP.NET MVC如何使用Identity增删改查用户”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET MVC如何使用Identity增删改查用户”吧!在
2023-07-04

VUE中的filters过滤器如何使用

这篇文章主要讲解了“VUE中的filters过滤器如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE中的filters过滤器如何使用”吧!前言Vue.js 允许我们自定义过滤器,可
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录