cs-Filters
ylbtech-Unitity: cs-Filters |
HealthcareAuthorizeAttribute.cs
HealthcareHandleErrorAttribute.cs
HealthcareJSONHandleErrorAttribute.cs
1.A,效果图返回顶部 |
1.B,源代码返回顶部 |
using Healthcare.Framework.Web.Mvc.Authentication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using System.Web.Security; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
//So now we are validating for secure part of the application
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var actionName = filterContext.ActionDescriptor.ActionName;
var controllerType = filterContext.Controller; //skip authorization for specific part of application, which have deliberately marked with [SkipAuthorizaion] attribute
if (filterContext.ActionDescriptor.IsDefined(typeof(SkipAuthorizaionAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(SkipAuthorizaionAttribute), true))
{
return;
}
//filterContext.HttpContext.Session["User"] = new Users()
//{
// EmployeeId = "79",
// EmployeeName = "Tom",
// LoginId = "2",
// LoginName = "Tom.xu",
// OrganizationID = "90",
// OrganizationCode = "01",
// OrganizationName = "总院"
//};
#if DEVBOX
filterContext.HttpContext.Session["User"] = new Users() { EmployeeId = "", EmployeeName = "Tom", LoginId = "", LoginName = "Tom.xu",
OrganizationID="",OrganizationCode="",OrganizationName="总院"};
#endif if( filterContext.HttpContext==null)
{
throw new MvcException("用户登录过期,请重新登录!");
} if (filterContext.HttpContext == null
|| filterContext.HttpContext.Session == null
|| filterContext.HttpContext.Session["User"] == null
|| !(filterContext.HttpContext.Session["User"] is Users)
|| (filterContext.HttpContext.Session["User"] as Users) == null )
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
throw new MvcException ("用户登录过期,请刷新窗口以后重新登录!");
}
else
{
filterContext.HttpContext.Session["RequestOldUrl"] = filterContext.HttpContext.Request.Url;
//filterContext.HttpContext.Session["RequestOldUrl"] = filterContext.HttpContext.Request.UrlReferrer; filterContext.Result = new RedirectResult("~/Account/LogOn"); //new HttpUnauthorizedResult("用户未登陆!");
return;
}
} var user = filterContext.HttpContext.Session["User"] as Users; if (filterContext.ActionDescriptor.IsDefined(typeof(PermissionsAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(PermissionsAttribute), true))
{
var controllerAttribute = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(PermissionsAttribute), true).Cast<PermissionsAttribute>().FirstOrDefault();
var actionAttribute = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PermissionsAttribute), true).Cast<PermissionsAttribute>().FirstOrDefault();
if (!IsUserAuthorized(user, controllerAttribute, actionAttribute))
{
throw new NoPermissionException("用户无权进行操作!");
}
} // base.OnAuthorization(filterContext);
} private static bool IsUserAuthorized(Users user, PermissionsAttribute controllerPermissions, PermissionsAttribute actionPermissions)
{
var effective = PermissionsAttribute.Merge(controllerPermissions, actionPermissions); if (effective.Allow.Length == )
return false; bool isUserAuthorized = effective.Allow.All(user.HasPermission);
return isUserAuthorized;
}
} [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class SkipAuthorizaionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class PermissionsAttribute : Attribute
{
public PermissionsAttribute(params string[] allow)
{
Allow = allow ?? new string[];
} public string[] Allow { get; private set; } public static PermissionsAttribute Merge(params PermissionsAttribute[] permissions)
{
if (permissions == null)
{
return new PermissionsAttribute();
} var allNotNullPermissions = permissions.Where(p => p != null); if (!allNotNullPermissions.Any())
{
return new PermissionsAttribute();
} return new PermissionsAttribute
{
Allow = allNotNullPermissions.Aggregate(new List<string>(),
(list, permissionsAttribute) =>
{
list.AddRange(permissionsAttribute.Allow);
return list;
}).ToArray()
};
}
}
}
1.B.2,HealthcareHandleErrorAttribute.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using System.Web;
using Elmah; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
// private Lazy<ILogger> logger = new Lazy<ILogger>(() => KernelContainer.Kernel.Get<ILogger>()); public virtual void OnException(ExceptionContext filterContext)
{
string controllerName = filterContext.RouteData.Values["Controller"] as string;
string actionName = filterContext.RouteData.Values["action"] as string; if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = "Error",
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
TempData = filterContext.Controller.TempData,
//ViewData["aa"] = filterContext.Controller.ViewBag.asd
};
filterContext.ExceptionHandled = true;
} if (!filterContext.ExceptionHandled
|| TryRaiseErrorSignal(filterContext)
|| IsFiltered(filterContext))
return; if (filterContext.ExceptionHandled)
{
if (TryRaiseErrorSignal(filterContext) || IsFiltered(filterContext))
return; LogException(filterContext); //自定义日志
//Logging.ErrorLoggingEngine.Instance().Insert("action:" + actionName + ";sessionid:" + (filterContext.HttpContext.GetHttpSessionId()), filterContext.Exception);
} } private static bool TryRaiseErrorSignal(ExceptionContext context)
{
var httpContext = GetHttpContextImpl(context.HttpContext);
if (httpContext == null)
return false;
var signal = ErrorSignal.FromContext(httpContext);
if (signal == null)
return false;
signal.Raise(context.Exception, httpContext);
return true;
} private static bool IsFiltered(ExceptionContext context)
{
var config = context.HttpContext.GetSection("elmah/errorFilter")
as ErrorFilterConfiguration; if (config == null)
return false; var testContext = new ErrorFilterModule.AssertionHelperContext(
context.Exception,
GetHttpContextImpl(context.HttpContext));
return config.Assertion.Test(testContext);
} private static void LogException(ExceptionContext context)
{
var httpContext = GetHttpContextImpl(context.HttpContext);
var error = new Error(context.Exception, httpContext);
ErrorLog.GetDefault(httpContext).Log(error);
} private static HttpContext GetHttpContextImpl(HttpContextBase context)
{
return context.ApplicationInstance.Context;
}
}
}
1.B.3,HealthcareJSONHandleErrorAttribute.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareJSONHandleErrorAttribute : HealthcareHandleErrorAttribute
{
public HealthcareJSONHandleErrorAttribute()
: base()
{
} public override void OnException(ExceptionContext filterContext)
{
Controller controller = filterContext.Controller as Controller;
Exception exception = filterContext.Exception; if (controller != null)
{
controller.Response.TrySkipIisCustomErrors = true;
controller.Response.StatusCode = (int)HttpStatusCode.AjaxErrorResult; object resultData;
if (exception.GetType() == typeof(System.TimeoutException))
{
resultData = new
{
DisplayMessage = "系统超时",
DetailMessage = exception.ToString(),
};
}
else
{
MvcException mvcException = exception as MvcException; if (mvcException != null)
{
resultData = mvcException.GetClientResultData();
}
else
{
resultData = new
{
DisplayMessage = "未知错误",
DetailMessage = exception.ToString(),
};
}
}
filterContext.Result = new JsonResult { Data = resultData, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; filterContext.ExceptionHandled = true;
} base.OnException(filterContext);
}
}
}
1.B.4,
1.C,下载地址返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
cs-Filters的更多相关文章
- MVC中的过滤器
authour: chenboyi updatetime: 2015-05-09 09:30:30 friendly link: 目录: 1,思维导图 2,过滤器种类(图示) 3,全局过滤器 ...
- 7天玩转 ASP.NET MVC
在开始时请先设置firefox中about:config中browser.cache.check_doc_frequecy设置为1,这样才能在关闭浏览器时及时更新JS 第一.二天的内容与之前的重复,这 ...
- System.Web.Mvc.Filters.IAuthenticationFilter.cs
ylbtech-System.Web.Mvc.Filters.IAuthenticationFilter.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Cultu ...
- SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search
1. Ensure your site or shared folder in one Content Source. 2. Add file types. 3. The second step in ...
- Global.asax.cs介绍
转载 http://www.cnblogs.com/tech-bird/p/3629585.html ASP.NET的配置文件 Global.asax--全局应用程序文件 Web.config--基 ...
- aspx.cs上传文件
aspx.cs文件 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- MVC中的Startup.Auth.cs、BundleConfig.cs、FilterConfig.cs和RouteConfig.cs
一.MVC中的Startup.Auth.cs.BundleConfig.cs.FilterConfig.cs和RouteConfig.cs四个文件在app_start中 <1>Bundle ...
- ASP.NET Core 菜鸟之路:从Startup.cs说起
1.前言 本文主要是以Visual Studio 2017 默认的 WebApi 模板作为基架,基于Asp .Net Core 1.0,本文面向的是初学者,如果你有 ASP.NET Core 相关实践 ...
- ASP.NET Core 2 学习笔记(十四)Filters
Filter是延续ASP.NET MVC的产物,同样保留了五种的Filter,分别是Authorization Filter.Resource Filter.Action Filter.Excepti ...
- .net core MVC 通过 Filters 过滤器拦截请求及响应内容
前提: 需要nuget Microsoft.Extensions.Logging.Log4Net.AspNetCore 2.2.6: Swashbuckle.AspNetCore 我暂时用的是 ...
随机推荐
- 一张图介绍 html中offset、client、scroll、offset 、padding、margin 各种属性介绍
- 搭建 Linux 下 GitLab 服务器【转】
转自:http://blog.csdn.net/passion_wu128/article/details/8216086 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 平台 ...
- Kuangbin带你飞 AC自动机
模板: struct Ac_Automation { int ch[MAXNNODE][SIGMA_SIZE]; int val[MAXNNODE]; int fail[MAXNNODE],last[ ...
- hdu 5167(dfs)
Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- Qt笔记——入门
Qt的介绍 跨平台c++图形用户界面应用程序框架 Qt的框架 父类(基类)子类(派生类) 头文件 QApplication应用程序类 Qt头文件没有.h 头文件和类名一样 有且只有一个应用程序类的对象 ...
- ibatis(sqlmap)中使用in语句的方法
对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...
- yii2.0在model里自定义数据表
无需多言,直接撸代码 class Zhuanjia extends \yii\db\ActiveRecord { public static function tableName() { return ...
- bash特性
(1)shell简介 shell是系统的用户界面,提供用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行.实际上shell是一个命令解释器 (2)shell语法 语法:命令 选 ...
- HDU 6315.Naive Operations-线段树(两棵树合并)(区间单点更新、区间最值、区间求和)+思维 (2018 Multi-University Training Contest 2 1007)
6315.Naive Operations 题意很好理解,但是因为区间求和求的是向下取整的a[i]/b[i],所以直接分数更新区间是不对的,所以反过来直接当a[i]==b[i]的时候,线段树对应的位置 ...
- (19)python扩展
当python程序遇到瓶颈时,可以考略扩展其他语言 例如:程序的某部分,需要高速度,或者与硬件交互时可以用到C语言.当其他语言有现成的程序,重新起来很麻烦时.有些功能用别的语言写更方便时 扩展语言有 ...