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接口或继承 ...
随机推荐
- Selenium 实现联想下拉框
直接在文本框输入字符,并不能实现联想下拉框, 第一种方式:强制执行js driver.FindElement(By.Id("top_search_input")).SendKeys ...
- [codevs3296]有序数组合并
题目描述 Description 合并两个有序数组A和B,使得结果依然有序. 进阶:合并两个有序数组A和B,假设A有n个数,B有m个数,A数组后面还有m个空余空间,需要将结果保存在A中. 请使用O(n ...
- 【HTML】Beginner6:Link
1.Link HTML wich basically means a system of linked text link to another HTML file or any file a ...
- FP树(附)
Apriori算法和FPTree算法都是数据挖掘中的关联规则挖掘算法,处理的都是最简单的单层单维布尔关联规则. 转自http://blog.csdn.net/sealyao/article/detai ...
- 微软 Build 2014开发者大会干货整理-1
微软 Build 2014开发者大会第二天的主题演讲主要包含两部分:Microsoft Azure的发展状况,以及 .NET和生态系统的发展介绍.第二天的重点整理也由此分为上下两部分.您可以在Chan ...
- windows下利用dll生成lib
原来工程编译的一些dll库,这次项目需要静态库,偷懒想直接转化.看到网上一些教程,使用VC工具和建立lib项目来实现.有点麻烦.还有一种方法,仅仅利用工具和几条命令转化.来试试看.文章参考harrie ...
- 如何将可执行文件打包至APK并运行(转)
原文链接:http://www.lupaworld.com/home.php?mod=space&uid=345712&do=blog&id=248921 好久没有写bolg了 ...
- java中服务器启动时,执行定时任务
package com.ripsoft.util; import java.util.Calendar; import java.util.Timer; import javax.servlet.Se ...
- iOS_icon命名规范 (iPhone_retina屏幕开发)
iOS_icon命名规范 (iPhone_retina屏幕开发) 规则: 位置名称_功能名称_ 详细区分标志名称@2x.png navigationItem_leftBackIcon@2x.png ...
- Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
本文主要描写叙述了在Oracle Linux 6.3下安装Oracle 11gR2(11.2.0.3).从Oracle 11g開始,Oracle官方站点不再提供其Patch的下载链接,须要使用Meat ...