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接口或继承 ...
随机推荐
- [King.yue]Ext.JS 弹出窗体取值赋值
//从Grid取值 var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Nam ...
- QT无法定位入口点QtCore4.dll(万恶的matlab啊)
今天安装QT, 参考: http://www.qtcn.org/bbs/simple/?t53333.html 遇到问题 发现怎么更matlab有关了.果断把系统环境变量改一下:放到了最前面 呵呵,行 ...
- Android UI -- 内容简介
Android UI(User Interface) 是android学习的必要课程,在接下来的内容我们将主要介绍 Android UI 的基础知识.
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- ios开发中如何实现软件版本更新
苹果给了我们一个接口,能根据应用id请求一些关于应用的信息.我们可以根据返回的信息,来判断版本是否和应用的版本一致,如果不一致,那么就出现新的版本了.这时,就需要向用户提醒有新的版本,需要更新.具体步 ...
- Python队列服务 Python RQ Functions from the __main__ module cannot be processed by workers.
在使用Python队列服务 Python RQ 时候的报错: Functions from the __main__ module cannot be processed by workers. 原因 ...
- 学习微信小程序之css13关于盒子外边距的合并
- 【三支火把】---C文件学习
---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...
- [USACO10MAR]伟大的奶牛聚集
[USACO10MAR]伟大的奶牛聚集 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会. 每个奶牛居住在 N(1<=N& ...
- Count属性(行数 @)
在PS2.0中,如果返回值为空,则count也会返回空(vm.txt内容为空),如下: (gc d:\vm.txt).count 如果加上@的话,会返回0 @(gc d:\vm.txt).count ...