MVC Filter自定义验证(拦截)
namespace QS.Web.Extensions
{
/// <summary>
/// 验证session、权限 状态
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class RequestFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
FilterAttributesInfo attributes = filterContext.GetExecutingContext(); switch (attributes.Action.ToUpper())
{
case "LOGIN":
case "LOGINVALID":
case "LOGOUT": break;
default:
//session验证
var sessionUserInfo = filterContext.HttpContext.Session[SystemConsts.AdminSession.ToString()];
if (null == sessionUserInfo)
{
var url = new UrlHelper(filterContext.RequestContext);
var routeUrl = url.Action("Login", "Account", new { ErrorMsg = "用户信息丢失!" });
filterContext.Result = new RedirectResult(routeUrl);
}
else
{
//参数非空验证
foreach (var param in attributes.ParameterArray)
{
param.ParameterName.CheckNotNullOrEmpty(param.ParameterName);
}
//权限验证
var permissions = filterContext
.HttpContext
.Session[SystemConsts.AdminRolePermissions.ToString()]
as List<SystemUserPermissionDto>;
if (!permissions.Any(x =>
x.ControllerName.ToLower() == attributes.Controller.ToLower() &&
x.ActionName.ToLower() == attributes.Action.ToLower()))
{
filterContext.Result = new ContentResult() { Content = "invalid operation :no permission" };
}
}
break;
}
base.OnActionExecuting(filterContext);
}
}
}
其中涉及到获取 filterContext的方法类如下:
// -----------------------------------------------------------------------
// <copyright file="FilterAttributesInfo.cs" company="技术支持——谭明超">
// Copyright (c) 2016 QS.Web.Extensions. All rights reserved.
// </copyright>
// <last-editor>谭明超</last-editor>
// <last-date>2016/8/2 18:37:01</last-date>
// ----------------------------------------------------------------------- using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace QS.Web.Extensions
{
/// <summary>
/// 互殴去
/// </summary>
public class FilterAttributesInfo
{
/// <summary>
/// 控制器名称
/// </summary>
public string Controller { get; set; }
/// <summary>
/// 方法名称
/// </summary>
public string Action { get; set; }
/// <summary>
/// route参数
/// </summary>
public ParameterDescriptor[] ParameterArray { get; set; } } /// <summary>
/// 获取 filter filterContext的相关属性
/// </summary>
public static class FilterAttributeExtension
{
/// <summary>
/// 获取当前filterContext的相关属性
/// </summary>
/// <param name="filterContext"></param>
/// <returns></returns>
public static FilterAttributesInfo GetExecutingContext(this ActionExecutingContext filterContext)
{
return new FilterAttributesInfo
{
Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
Action = filterContext.ActionDescriptor.ActionName,
ParameterArray = filterContext.ActionDescriptor.GetParameters()
};
}
} }
MVC Filter自定义验证(拦截)的更多相关文章
- MVC Filter自定义异常(拦截)
// ----------------------------------------------------------------------- // <copyright file=&qu ...
- ASP.NET MVC自定义验证Authorize Attribute
前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...
- ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)
前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...
- Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置
Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...
- asp.net MVC之 自定义过滤器(Filter) - shuaixf
一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...
- Spring Mvc 的自定义拦截器
spring mvc的拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户 ...
- ASP.NET MVC 3 使用Model自定义验证的样式
1.修改jquery.validate.unobtrusive.js 将onError方法修改 //修改的部分 //////////////////////////////////////////// ...
- Spring MVC基础知识整理➣拦截器和自定义注解
概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...
- Spring MVC中自定义拦截器的简单示例
1. 引言 拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的Filter. 我们可以让普通的Bean实现HandlerIntercpetor接口或继承 ...
随机推荐
- [Andrew]Ext.Net常用布局(Border布局)
@(Html.X().Window().Width(600).Height(400).Layout(LayoutType.Border) .Items(p => { p.Add(Html ...
- [BILL WEI] SQL 巧用临时表
在写sql 的时候,我们有时候,只需要拿出某些特定的数据,去跟一些表进行关联,但是如果直接通过表关联的话,可能拿到 的数据有冗余,这个时候,我们就可以巧用临时表,讲自己需要的特定数据筛选出来,然后组成 ...
- visualbox使用(二)
1.安装VirtualBox的[增强功能]2.VirtualBox的[设备]->[共享文件夹],添加固定分配,如D:\Java, 名称Java3.执行如下命令#cd /mnt#mkdir w_j ...
- sensor的skipping and binning 模式
关于sensor的缩放存在两种模式 binning mode 和skip mode skipping mode 就是把想要的数据采集上来 把其余的数据扔掉 如下所示 column skip 2 row ...
- Dynamics CRM 2011 2013-(An error occurred while opening mailbox xxx@xx.com Microsoft.Crm.Tools.Email.Providers.)
An error occurred while opening mailbox Microsoft.Crm.Tools.Email.Providers. Whenever I check how C ...
- A Tour of Go Making slices
Slices are created with the make function. It works by allocating a zeroed array and returning a sli ...
- 导入excel数据
前提条件:先要安装好EXCEL软件. 程序中经常要用到导入excel数据的功能.其实通过ole操作excel就简单的几行代码,但记性不好,经常要用经常要找, 还是作篇笔记吧. var ExcelApp ...
- [每日一题] 11gOCP 1z0-053 :2013-10-9 backup with the KEEP option....................................33
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12517603 正确答案:AB 在Oracle 11g中,可以使用backup ….keep ...
- spring事物传播机制 事物隔离级别
Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPORTS--支持当前事务,如 ...
- 使用CSS3(一)
开发商前缀(vendor prefix) 前缀 浏览器 -moz- Firefox -webkit- Chrome和Safari(它们的引擎都是WebKit) -ms- Internet Explor ...