MVC中的Filter:权限验证FIlter

MVC为我们提供了四种Filter

  IAuthorizationFilter

  IActionFilter

  IResultFilter

  IExceptionFilter

1、IAuthorizationFilter(权限验证Filter)

  一般用来检查当前用户是否有Action的执行权限,在每个Action被执行前执行OnAuthorization方法:

2、IActionFilter

  也是在每个Action被执行前执行OnActionExecuting方法,每个Action执行完成之后执行OnActionExecuted方法。

  和IAuthorizationFilter的区别是IAuthorizationFilter在IActionFilter之前执行,检查权限一般写到IAuthorizationFilter中。

3、IResultFilter

  在每个ActionResult的前后执行IResultFilter,很少使用。

4、IExceptionFilter(异常处理Filter)

  当Action的执行发生未处理的异常的时候执行OnException方法。在ASP.Net中,仍可以使用Gobal的Application_Error处理异常

  建议使用IExceptionFilter

 

IAuthorizationFilter应用:只用登录后才可以访问LoginController之外的Controller(对登录页面不检查,不然会进不去登录页面)

页面的创建:

创建LoginController,创建Index Action用于显示登陆页面

 

LoginController中创建Login Action接收表单提过来的直接,登陆成功存值到Session中

页面跳转到HomeController中的Indenx页面,登陆失败返回登陆失败。

 HomeControler,Index

配置Filter

创建一个类CheLoginFilter类,实现IAuthorizationFilter接口,重写OnAuthorization方法

设置除了Login页面意外其他的Controller和Action都进行检查,如果没有登录就跳转到登录页

在Global 中注册全局使用自定义的CheLoginFilter

 

IActionFilter应用:让每个Action执行前后都记录一次日志

创建LogActionFilter类,实现IActionFilter接口,重写OnActionExecuting和OnActionExecuted方法

OnActionExecuting在Action执行前执行:我们在OnActionExecuting方法中拿到当前执行到的Controller和Action名字,记录到Log.txt中

OnActionExecuted在Action执行前执行:也是在OnActionExecuting方法中拿到当前执行到的Controller和Action名字,记录到Log.txt中

在Global 中注册全局使用自定义的LogActionFilter

运行程序,在项目更目录

 

 IEXceptionFilter应用:如果当前执行的Action中有异常,则记录到error.txt文件中

创建ExceptionFilter类,实现IExceptionFilter接口,重写OnException方法,在里面记录异常信息

 在Global 中注册全局使用自定义的ExceptionFilter

 

造一个异常出来

 运行程序,查看结果

 

   filterContext.ExceptionHandled = true;// 如果有其它的IExceptionFilter,不会在执行

 

非全局Filter:

我们在Global文件中的Application_Start()方法中注册的Filter都是全局使用的

也就是说执行到任何Controller和Action都会执行Filter

 

 如果我们想指定某个Controller或者Action上执行我们自定义的Filter,那么就让自定义的Filter类

继承FilterAttribute类在实现对应的Filter接口。

然后在要使用Filter的Controller或者Action上以特性的方式标注即可。这样,就只在标注的Controller或者Action启用了Filter。

 

 

 

posted @ 2019-11-24 19:49  Jenkin_Tong  阅读(664)  评论(0)    收藏  举报