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自定义验证(拦截)的更多相关文章

  1. MVC Filter自定义异常(拦截)

    // ----------------------------------------------------------------------- // <copyright file=&qu ...

  2. ASP.NET MVC自定义验证Authorize Attribute

    前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...

  3. ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

    前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...

  4. Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置

    Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...

  5. asp.net MVC之 自定义过滤器(Filter) - shuaixf

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...

  6. Spring Mvc 的自定义拦截器

     spring mvc的拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户 ...

  7. ASP.NET MVC 3 使用Model自定义验证的样式

    1.修改jquery.validate.unobtrusive.js 将onError方法修改 //修改的部分 //////////////////////////////////////////// ...

  8. Spring MVC基础知识整理➣拦截器和自定义注解

    概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...

  9. Spring MVC中自定义拦截器的简单示例

    1. 引言 拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的Filter. 我们可以让普通的Bean实现HandlerIntercpetor接口或继承 ...

随机推荐

  1. 【原】Spark中Master源码分析(一)

    Master作为集群的Manager,对于集群的健壮运行发挥着十分重要的作用.下面,我们一起了解一下Master是听从Client(Leader)的号召,如何管理好Worker的吧. 1.家当(静态属 ...

  2. 【CSS】Intermediate2:Pseudo Classes

    1.specify a state or relation to the selector selector:pseudo_class { property: value; } 2.Link 3.Dy ...

  3. Java笔记(七)……函数

    函数的定义 定义在类中具有特定功能的一段独立小程序,也称方法. 函数的格式 1: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,) 2: { 3: 执行语句; 4: retu ...

  4. POJ-1177 Picture 矩形覆盖周长并

    题目链接:http://poj.org/problem?id=1177 比矩形面积并麻烦点,需要更新竖边的条数(平行于x轴扫描)..求横边的时候,保存上一个结果,加上当前长度与上一个结果差的绝对值就行 ...

  5. Kooboo 加Search功能 必须先ReBuild Index Data

      加Search功能   有几个要点 1. 需要在Kooboo 必须先 ReBuild Index Data 2. 需要在要搜索的page中启用搜索索引         搜索的代码 @using K ...

  6. centos6 kvm网卡桥接

    以前用VMware,我的上司说,你既然都用CentOS的桌面,那就研究一下KVM. 好吧,上司做运维好几年了,就听了他的,装了一个KVM. KVM的网络默认是NAT,不方便,就学习BRIDGE!!! ...

  7. 在C#中生成唯一的字符串和数字【GUID】转

    转自:http://www.cnblogs.com/lcwzj/archive/2009/04/16/1436992.html 当我们想要获得一个唯一的key的时候,通常会想到GUID.这个key非常 ...

  8. hdoj 4183 Pahom on Water

    Pahom on Water Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. poj 3177 Redundant Paths【求最少添加多少条边可以使图变成双连通图】【缩点后求入度为1的点个数】

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11047   Accepted: 4725 ...

  10. Java 中 String 类和StringBuilder 类的常用方法

    String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等,下面我们就来领略它的强大之处吧. String 类的常用方法: 结合代码 ...