MVC权限验证之ActionFilterAttribute

简介: 参考:http://www.cnblogs.com/waitingfor/archive/2011/12/27/2303784.html   ActionFilterAttribute是Action过滤类,该属于会在执行一个action之前先执行.

参考:http://www.cnblogs.com/waitingfor/archive/2011/12/27/2303784.html

 

ActionFilterAttribute是Action过滤类,该属于会在执行一个action之前先执行.

而ActionFilterAttribute是 MVC的一个专门处理action过滤的类.基于这个原理 我们做一个权限限制

例如:如何访问 HomeController  里的test  action

 

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcTest.Models;
namespace MvcTest.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/


public ActionResult Index()
{

return View();
}
[AuthorizeFilter]
public ActionResult test()
{
return Content("有权访问");
}
}
}
复制代码

 

建立AuthorizeFilterAttribute.cs   内容如下

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcTest.Models
{
/// <summary>
/// 权限拦截
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class AuthorizeFilterAttribute : ActionFilterAttribute
{
filterContextInfo fcinfo;
// OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。
// OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。
// OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。

/// <summary>
/// 在执行操作方法之前由 ASP.NET MVC 框架调用。
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{

fcinfo = new filterContextInfo(filterContext);
//fcinfo.actionName;//获取域名
//fcinfo.controllerName;获取 controllerName 名称

bool isstate = true;
//islogin = false;
if (isstate)//如果满足
{
//逻辑代码
// filterContext.Result = new HttpUnauthorizedResult();//直接URL输入的页面地址跳转到登陆页
// filterContext.Result = new RedirectResult("http://www.baidu.com");//也可以跳到别的站点
   //filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { Controller = "product", action = "Default" }));
}
else
{
filterContext.Result = new ContentResult { Content = @"抱歉,你不具有当前操作的权限!" };// 直接返回 return Content("抱歉,你不具有当前操作的权限!")
}

}
/// <summary>
/// 在执行操作方法后由 ASP.NET MVC 框架调用。
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuted(ActionExecutedContext filterContext)
{

base.OnActionExecuted(filterContext);
}

/// <summary>
/// OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}
/// <summary>
/// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}

}

public class filterContextInfo
{
public filterContextInfo(ActionExecutingContext filterContext)
{
#region 获取链接中的字符
// 获取域名
domainName = filterContext.HttpContext.Request.Url.Authority;

//获取模块名称
// module = filterContext.HttpContext.Request.Url.Segments[1].Replace('/', ' ').Trim();

//获取 controllerName 名称
controllerName = filterContext.RouteData.Values["controller"].ToString();

//获取ACTION 名称
actionName = filterContext.RouteData.Values["action"].ToString();

#endregion
}
/// <summary>
/// 获取域名
/// </summary>
public string domainName { get; set; }
/// <summary>
/// 获取模块名称
/// </summary>
public string module { get; set; }
/// <summary>
/// 获取 controllerName 名称
/// </summary>
public string controllerName { get; set; }
/// <summary>
/// 获取ACTION 名称
/// </summary>
public string actionName { get; set; }

}

}
相关文章
|
前端开发 .NET 数据安全/隐私保护
菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部方法来判断跳转returnUrl //内部跳转 private IActionR...
2590 0
|
存储 前端开发 Java
Spring MVC 中的数据绑定和验证机制是什么,如何使用
Spring MVC 中的数据绑定和验证机制是什么,如何使用
|
设计模式 前端开发 druid
Java Web实战 | MVC案例:用户登录验证
本文结合图1的多层设计架构,以用户登录验证应用程序为例,说明如何将MVC模式应用于Web应用程序的开发,具体步骤如下所述。
211 0
Java Web实战 | MVC案例:用户登录验证
|
前端开发 Java Spring
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
235 0
|
缓存 前端开发 Oracle
基于 .NET Core MVC 的权限管理系统
基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单。它可以用于所有的Web项目,例如网站管理后台、CMS、CRM、ERP、OA这类的系统和移动端Api。
319 0
基于 .NET Core MVC 的权限管理系统
|
前端开发 JavaScript API
NET MVC第七章、jQuery插件验证
NET MVC第七章、jQuery插件验证
185 0
NET MVC第七章、jQuery插件验证
|
前端开发 数据库 计算机视觉
关于MVC中模型model的验证问题
关于MVC中模型model的验证问题
146 0
关于MVC中模型model的验证问题
|
Web App开发 前端开发
MVC5+EF6 入门完整教程12--灵活控制Action权限
原文:MVC5+EF6 入门完整教程12--灵活控制Action权限 大家久等了。 本篇专题主要讲述MVC中的权限方案。 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一。 前面的系列文章中我们用到了 SysUser, SysRole, SysUserRole 这几个示例表。
1234 0
|
前端开发
4.ASP.NET全栈开发之在MVC中使用服务端验证(二)
首先声明,这篇博文是完善.ASP.NET全栈开发之在MVC中使用服务端验证 的,所以重复内容,我就不过多的阐述,很多问题都是在实践中去发现,然后再去完善,这篇博文也一样,建立在已阅 “.ASP.NET全栈开发之在MVC中使用服务端验证” 的基础上。
1264 0
|
前端开发 UED .NET
2.ASP.NET全栈开发之在MVC中使用服务端验证
上一章我们在控制台中基本的了解了FluentValidation是如何简洁,优雅的完成了对实体的验证工作,今天我们将在实战项目中去应用它。 首先我们创建一个ASP.NET MVC项目,本人环境是VS2017, 创建成功后通过在Nuget中使用 Install-Package FluentValidation -Version 7.
1141 0