c# mvc 自定义AuthorizeAttribute
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相关推荐
- MVC自定义AuthorizeAttribute实现权限管理
[转]MVC自定义AuthorizeAttribute实现权限管理 原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html 网站的权 ...
- MVC 自定义AuthorizeAttribute实现权限管理
在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize]public ActionResult TestAuthorize(){ return View();} ...
- ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
阅读目录 1.前言 2.AuthorizeAttribute登录特性解释 3.代码示例 1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebFo ...
- 自定义AuthorizeAttribute实现MVC权限设计
文本为您介绍:自定义AuthorizeAttribute实现MVC权限设计,主要是通过将角色与controller.action等参数关联进行用户权限判断,然后通过自定义AuthorizeAttrib ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- asp.net mvc 自定义 pager 封装与优化
asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...
- Spring MVC自定义验证注释
在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...
- ASP.NET MVC 自定义Razor视图WorkContext
概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...
- 如何在ASP.NET Core中创建自定义AuthorizeAttribute?
本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...
最新文章
- java拍照搜题软件下载_修改版|学生福利!!免费拍照搜题秒出答案,扫一扫作业出答案!...
- maya为什么不能导出fbx_Maya无法展 UV的解决办法
- Ubuntu9.10 安装试水
- 用python画qq表情_用Python编写提取QQ表情的脚本
- 第三次学JAVA再学不好就吃翔(part77)--迭代器遍历
- 回溯专题leetcode
- redis循环键_Redis的并发控制
- 学web前端有什么计划?
- linux添加超级管理员用户,修改,删除用户
- 软件验收测试报告报价,软件验收测试介绍和软件验收报告的费用是多少?
- DTU是什么 DTU种类及应用领域分析
- ModSecurity规则
- syn重发_SYN***原理及处理
- 计算机自动执行的条件是,电脑中winsat.exe进程总会自动运行的解决方法
- Win10系统下Python安装和Geany环境配置的几点总结
- 金立 M6 (GN8003) 解锁 BootLoader 进入第三方 recovery 刷机 ROOT
- 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
- 嵌入式linux智能小车ppt,基于FPGA嵌入式系统的智能小车全面解析
- 公司价值评估-自由现金流法
- 虚拟团队四大管理技巧
热门文章
- JDK源码分析实战系列-PriorityQueue
- 有限元缺陷:剪切锁死
- Ubuntu20,opencv4,cere14编译vins报错
- oracle发邮件时间不对,oracle 发邮件错误
- WIFI万能钥匙面试引出上线注意事项
- 到底什么时候该用索引
- INCA 安装及使用教程
- linux设备描述文件,iOS开发 - 超级签名实现之描述文件
- win7修复计算机无法修复工具栏,win7系统鼠标点不了下面任务栏的修复办法
- 【python】pandas库pd.read_excel操作读取excel文件参数整理与实例