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 我暂时用的是 ...
随机推荐
- [bzoj2427][HAOI2010]软件安装——强连通分量+树形DP
题目大意 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...
- netsh winsock reset 命令并回车
1. Win+R 打开运行窗口,输入 CMD 并确认打开命令行窗口.2. 在命令行窗口输入 netsh winsock reset 命令并回车,待提示重启计算机时,重启计算机
- POJ2255(二叉树遍历)
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13000 Accepted: 8112 De ...
- 大话Linux内核中锁机制之原子操作、自旋锁【转】
转自:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实 ...
- vs附加到进程报MSVSMON.EXE未在远程计算机启动错误
拿到同事电脑发现居然附加不上本地进程,网上那些关防火墙更改目标平台之类的方法都没用.最后发现是后台运行着一个叫 ss_privoxy.exe 的代理软件搞的,禁用所有非系统服务重启后删掉以绝后患.
- springboot整合mybatis+pageHelper
springboot整合mybatis+pageHelper 〇.搭建sporingboot环境,已经整合mybatis环境,本篇主要是添加pageHelper工具 一.添加依赖 <!-- 分页 ...
- dubbo消费方超时处理
在我们分布式系统中,远程调用可能随时会出现调用超时,然后抛异常 在dubbo内部,默认设置的是500ms(好像是),所以,对于crud事物大的系统来讲肯定是要自定义超时时间咯,作为消费方,自然是优先级 ...
- hibernate基础学习
转载自:http://blog.csdn.net/fb281906011/article/details/17628111 一:下载hibernate:http://hibernate.org/orm ...
- [ Openstack ] Openstack-Mitaka 高可用之 网络服务(Neutron)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- Vue cmd命令操作
1.安装node(安装到电脑中,不同项目不需重复安装) 安装nodejs(如果不是在C:则需要配环境变量)2.打开cmd C:创建一个文件夹(名字不要用node) 1.进入该文件夹 2.node -v ...
