1)自定义AuthorizeAttribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace WebApplication50.Controllers
{public class LintwayAuthorizeAttribute : AuthorizeAttribute{/// <summary>/// 判断用户是否登录成功/// 登录成功返回true,否者返回false/// 返回false将读取web.config中的loginUrl跳转到登录页面/// </summary>/// <param name="httpContext"></param>/// <returns></returns>protected override bool AuthorizeCore(HttpContextBase httpContext){var isAuthorized = false;if (httpContext != null && httpContext.Session != null){if (httpContext.Session["UserID"] != null){isAuthorized = true;}}return isAuthorized;}public override void OnAuthorization(AuthorizationContext filterContext){base.OnAuthorization(filterContext);}}
}

2)在Web.config的<system.web>中添加登录页面的Url

<authentication mode="Forms"><forms loginUrl="~/Home/Login" timeout="2880" /></authentication>

3)修改HomeController,并生成添加视图HomeController代码如下(Index、About调用自定义AuthorizeAttribute)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace WebApplication50.Controllers
{public class HomeController : Controller{[LintwayAuthorize]public ActionResult Index(){return View();}[LintwayAuthorize]public ActionResult About(){return View();}public ActionResult Login(){return View();}/// <summary>/// 模拟登录操作,往Session添加数据/// </summary>/// <param name="UserID"></param>/// <returns></returns>public JsonResult DoLogin(int UserID){Session["UserID"] = UserID;JsonResult returnJson = new JsonResult();returnJson = Json(new { LoginSuccess=true});return returnJson;}}
}

4)登录页面前台代码

@{Layout = null;
}<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width" /><title>Login</title><script src="~/Scripts/jquery-1.10.2.min.js"></script><script type="text/javascript">$(function () {$('#btnLogin').click(function(){var url = '@Url.Action("DoLogin","Home")';$.post(url, { UserID: 1}, function (result) {if (result.LoginSuccess == true) {window.location.href = getQueryString('ReturnUrl');}});});});function getQueryString(name) {//获取url参数var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = decodeURI(window.location.search.substr(1)).match(reg);if (r != null) return unescape(r[2]); return null;}</script>
</head>
<body><div> <input id="btnLogin" type="button" value="Login" /></div>
</body>
</html>

整个权限管理的过程:

用户打开About页面由于Action About调用了LintwayAuthorize,在显示About页面之前它将运行LintwayAuthorize中的OnAuthorization、AuthorizeCore重载事件,由于Session["UserID"]==null所以AuthorizeCore返回false,页面根据Web.config中配置跳转到Login页面。

用户单击登录按钮创建Session["UserID"]并返回到About页面

和之前一样由于Action About调用了LintwayAuthorize,在显示About页面之前它将运行LintwayAuthorize中的OnAuthorization、AuthorizeCore重载事件,这次Session["UserID"]!=null,所以AuthorizeCore返回true,页面就停留在About页面。

c# mvc 自定义AuthorizeAttribute相关推荐

  1. MVC自定义AuthorizeAttribute实现权限管理

    [转]MVC自定义AuthorizeAttribute实现权限管理 原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html 网站的权 ...

  2. MVC 自定义AuthorizeAttribute实现权限管理

    在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize]public ActionResult TestAuthorize(){ return View();} ...

  3. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    阅读目录 1.前言 2.AuthorizeAttribute登录特性解释 3.代码示例 1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebFo ...

  4. 自定义AuthorizeAttribute实现MVC权限设计

    文本为您介绍:自定义AuthorizeAttribute实现MVC权限设计,主要是通过将角色与controller.action等参数关联进行用户权限判断,然后通过自定义AuthorizeAttrib ...

  5. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  6. asp.net mvc 自定义 pager 封装与优化

    asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...

  7. Spring MVC自定义验证注释

    在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...

  8. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

  9. 如何在ASP.NET Core中创建自定义AuthorizeAttribute?

    本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...

最新文章

  1. java拍照搜题软件下载_修改版|学生福利!!免费拍照搜题秒出答案,扫一扫作业出答案!...
  2. maya为什么不能导出fbx_Maya无法展 UV的解决办法
  3. Ubuntu9.10 安装试水
  4. 用python画qq表情_用Python编写提取QQ表情的脚本
  5. 第三次学JAVA再学不好就吃翔(part77)--迭代器遍历
  6. 回溯专题leetcode
  7. redis循环键_Redis的并发控制
  8. 学web前端有什么计划?
  9. linux添加超级管理员用户,修改,删除用户
  10. 软件验收测试报告报价,软件验收测试介绍和软件验收报告的费用是多少?
  11. DTU是什么 DTU种类及应用领域分析
  12. ModSecurity规则
  13. syn重发_SYN***原理及处理
  14. 计算机自动执行的条件是,电脑中winsat.exe进程总会自动运行的解决方法
  15. Win10系统下Python安装和Geany环境配置的几点总结
  16. 金立 M6 (GN8003) 解锁 BootLoader 进入第三方 recovery 刷机 ROOT
  17. 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
  18. 嵌入式linux智能小车ppt,基于FPGA嵌入式系统的智能小车全面解析
  19. 公司价值评估-自由现金流法
  20. 虚拟团队四大管理技巧

热门文章

  1. JDK源码分析实战系列-PriorityQueue
  2. 有限元缺陷:剪切锁死
  3. Ubuntu20,opencv4,cere14编译vins报错
  4. oracle发邮件时间不对,oracle 发邮件错误
  5. WIFI万能钥匙面试引出上线注意事项
  6. 到底什么时候该用索引
  7. INCA 安装及使用教程
  8. linux设备描述文件,iOS开发 - 超级签名实现之描述文件
  9. win7修复计算机无法修复工具栏,win7系统鼠标点不了下面任务栏的修复办法
  10. 【python】pandas库pd.read_excel操作读取excel文件参数整理与实例