MVC 记录操作日志与过滤特殊字符
最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制
写了个特殊字符验证与记录操作日志的公用类:
public class CustomFilterAttribute : ActionFilterAttribute
{
public CustomFilterAttribute()
{
IsLog = false;
FilterSpecialChar = true;
} /// <summary>
/// 是否记录日志
/// </summary>
public bool IsLog { get; set; } /// <summary>
/// 是否过滤特殊字符
/// </summary>
public bool FilterSpecialChar { get; set; } /// <summary>
/// 登录用户
/// </summary>
public string UserName { get; set; } /// <summary>
/// 操作简介
/// </summary>
public string Message { get; set; } /// <summary>
/// action执行前特殊字符过滤
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext); if (filterContext.ActionParameters.Count > )
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
if (IsContainSpecialChar(filterContext.ActionParameters))
{
var json = new JsonResult();
json.Data = new { status = false, msg = "您输入的数据中包含特殊字符。" };
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
filterContext.Result = json;
}
}
else if (IsContainSpecialChar(filterContext.ActionParameters))
{
var ReturnUrl = "/Login/Index";
filterContext.Result = new RedirectResult(ReturnUrl);
}
} return;
} /// <summary>
/// action执行后记录日志
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
if (this.IsLog)
{
var ActionName = filterContext.ActionDescriptor.ActionName;
var Url = "/" + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName + "/" + ActionName; //var loginInfo = (ViewModel.t_User_VModel)filterContext.HttpContext.Session["userMdl"];
string OperateIP = HttpContext.Current.Request.UserHostAddress; //登录用户
//if (loginInfo != null)
//{
// this.UserName = loginInfo.UserName;
//}
this.UserName = "测试";
Message = filterContext.Exception == null ? "成功" : "失败" + Message; new JiaSoftOTOSystem.BLL.OperateLog_BLL().AddOprateLog(UserName, OperateIP, Url, ActionName, Message);
}
} //public override void OnResultExecuting(ResultExecutingContext filterContext)
//{
// base.OnResultExecuting(filterContext);
// //filterContext.HttpContext.Response.Write("返回Result之前" + Message + "<br />");
//} //public override void OnResultExecuted(ResultExecutedContext filterContext)
//{
// base.OnResultExecuted(filterContext);
// //filterContext.HttpContext.Response.Write("返回Result之后" + Message + "<br />");
//} /// <summary>
/// 验证string类型参数中是否含有特殊字符
/// </summary>
/// <param name="paramters"></param>
/// <returns>有:true,没有:false</returns>
public bool IsContainSpecialChar(IDictionary<string, object> paramters)
{
bool bResult = false;
System.Text.StringBuilder strParam = new System.Text.StringBuilder();
foreach (var item in paramters)
{
if (item.Value != null)
{
Type types = item.Value.GetType();
if (types.Name.EndsWith("Model"))
{
System.Reflection.PropertyInfo[] ps = types.GetProperties();
foreach (PropertyInfo pi in ps)
{
object value = pi.GetValue(item.Value, null);//用pi.GetValue获得值
string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
//获得属性的类型,进行判断然后进行以后的操作,例如判断获得的属性是整数
if (value != null && value.ToString().Length > )
{
if (value.GetType() == typeof(string))
{
if (FilterSpecialChar && !bResult && Regex.IsMatch(value.ToString(), @"[~<>$%\^\+\&\\\/\?\|:\{}()';=]"))
{
bResult = true;
strParam.Append(name + "=" + value.ToString().Replace("'", "‘").Replace("\"", "").Replace("&", "&").Replace("<", "<").Replace(">", ">") + "|");
}
else if (IsLog)
{
strParam.Append(name + "=" + value + "|");
}
}
else if (IsLog && item.Value.GetType() == typeof(Guid) && item.Value.ToString() != Guid.Empty.ToString())
{
strParam.Append(name + "=" + value + "|");
}
else if (IsLog && (item.Value.GetType() == typeof(int) || item.Value.GetType() == typeof(decimal)) && item.Value.ToString() != "")
{
strParam.Append(name + "=" + value + "|");
}
else if (IsLog)
{
strParam.Append(name + "=" + value + "|");
}
}
}
}
else if (item.Value != null && item.Value.ToString().Length > )
{
if (item.Value.GetType() == typeof(string))
{
if (FilterSpecialChar && !bResult && Regex.IsMatch(item.Value.ToString(), @"[~<>$%\^\+\&\\\/\?\|:\{}()';=]"))
{
bResult = true;
strParam.Append(item.Key + "=" + item.Value.ToString().Replace("'", "‘").Replace("\"", "").Replace("&", "&").Replace("<", "<").Replace(">", ">") + "|");
}
else if (IsLog)
{
strParam.Append(item.Key + "=" + item.Value + "|");
}
}
else if (IsLog && item.Value.GetType() == typeof(Guid) && item.Value.ToString() != Guid.Empty.ToString())
{
strParam.Append(item.Key + "=" + item.Value + "|");
}
else if (IsLog && (item.Value.GetType() == typeof(int) || item.Value.GetType() == typeof(decimal)) && item.Value.ToString() != "")
{
strParam.Append(item.Key + "=" + item.Value + "|");
}
else if (IsLog)
{
strParam.Append(item.Key + "=" + item.Value + "|");
}
}
}
} this.Message = "。参数:" + strParam.ToString(); return false;
} }
调用方式如下:
aaarticlea/png;base64,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" alt="" />
验证结果:如果包含特殊字符:如果是ajax请求则返回json,否则返回到错误页。
MVC 记录操作日志与过滤特殊字符的更多相关文章
- Appfuse:记录操作日志
appfuse的数据维护操作都发生在***form页面,与之对应的是***FormController,在Controller中处理数据的操作是onSubmit方法,既然所有的操作都通过onSubmi ...
- Tomcat会话超时时怎样记录操作日志,满足安全审计要求
众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. To ...
- 使用SpringBoot AOP 记录操作日志、异常日志
平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能:我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 ...
- Spring aop 记录操作日志 Aspect
前几天做系统日志记录的功能,一个操作调一次记录方法,每次还得去收集参数等等,太尼玛烦了.在程序员的世界里,当你的一个功能重复出现多次,就应该想想肯定有更简单的实现方法.于是果断搜索各种资料,终于搞定了 ...
- springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志
1.操作日志实体类 @Document(collection = "operation_log") @Getter @Setter @ToString public class O ...
- MVC增加操作日志
在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...
- .Net捕获网站异常信息记录操作日志
第一步:在Global.asax文件下的Application_Error()中写入操作日志 /// <summary> /// 整个网站出现异常信息,都会执行此方法 /// </s ...
- 自定义日志注解 + AOP实现记录操作日志
需求:系统中经常需要记录员工的操作日志和用户的活动日志,简单的做法在每个需要的方法中进行日志保存操作, 但这样对业务代码入侵性太大,下面就结合AOP和自定义日志注解实现更方便的日志记录 首先看 ...
- spring-boot-route(十七)使用aop记录操作日志
在上一章内容中--使用logback管理日志,我们详细讲述了如何将日志生成文件进行存储.但是在实际开发中,使用文件存储日志用来快速查询问题并不是最方便的,一个优秀系统除了日志文件还需要将操作日志进行持 ...
随机推荐
- Probit回归模型
Probit模型也是一种广义的线性模型,当因变量为分类变量时,有四种常用的分析模型: 1.线性概率模型(LPM)2.Logistic模型3.Probit模型4.对数线性模型 和Logistic回归一样 ...
- ASP.NET 程序中删除文件夹导致session失效解决问题
在Global中 Application_Start 添加 如: void Application_Start(object sender, EventArgs e) { //在 ...
- oracle给字段添加描述
oracle中,我们有时候需要给表的字段添加描述.用以下语句即可. alter table a add b varchar2(2); comment on column a.b is '这是表a的字 ...
- 练习使用XRecyclerView,可上拉下拉刷新。
package com.lixu.testxrecyclerview; import android.support.v7.app.AppCompatActivity; import android. ...
- JavaScript对象中的属性(可写,可配置,可枚举,value,getter,setter)
JavaScript中,对象包括3个特性,分别为,可扩展性,class标识符,属性. 如果对象的可扩展性为false,则不可为对象动态的添加属性. 对象包含分为存取器属性和值属性.存取属性为 {g ...
- qq快速聊天
和女朋友聊天的时候,每次发完消息我都习惯性把聊天界面关了,或者我想找女朋友聊天了,又要打开主界面再打开聊天窗口 每次感觉特别麻烦.所以我在想有没有一个好的办法直接打开聊天窗口的.刚好这两天又在写jav ...
- debug实战:COM组件GetToSTA导致高内存+GC被阻塞
最近花了好几周解决一个WPF高内存的问题,问题的表象是内存不断增加.未被回收,根源是GC的FinalizeThread被阻塞,导致整个GC挂掉.从以下几步来分析这个问题: 1.用ANTS Memory ...
- 新手入门之GDB调试
写这篇文章算是对最近两天工作的一个经验总结吧. 要让可执行文件比较方便地在DGB上调试,在用gcc编译的时候要使用-g选项. 如何使用GDB启动被调试程序? "gdb path_to_deb ...
- OutputCache 如何使用本地缓存 【转】
注意!ASP.NET MVC 3 的一个 OutputCache 问题 在用 ASP.NET MVC 3 重写博客园网站首页时,特地留意了一下这个缓存问题,通过这篇博文分享一下. 在 ASP.NE ...
- JS rem 设置
(function () { var docEl = document.documentElement; var resize = 'orientationchange' in window ? 'o ...