近日,在对一个MVC项目进行权限监控的时候发现一个问题,自己本身定义的控制器是可以过滤controller/views页面的,当输入相应的controller/views 的url,过滤器可以对其进行监控,并判断其是否登录和是否有权限。
但是如果是有一些自定义的文件,比如一些静态html页,此时当我们输入对应的url时候,是不经过过滤器的,他会直接进入到相应的页面,这样对于一些文件的隐私性就有一些隐患。
解决方法就是在webconfig里面加入如下模块
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
这样,我们在全局配置文件Global.asax里面,就可以监控到所有的url。其里面有很多方法,其中有一个方法是 Application_BeginRequest:在接收到一个应用程序请求时触发对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。
Global.asax 文件继承自HttpApplication 类,它维护一个HttpApplication 对象池,并在需要时将对象池中的对象分配给应用程序。因此,HttpApplication类中所有的方法、类和对象对于应用程序都是可用的
并且global里面还定义了很多事件,比如
- Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发对于所有的HttpApplication对象实例,它都会被调用
- Application_Error:当应用程序中遇到一个未处理的异常时,该事件被触发
- Application_Start:在HttpApplication类的第一个实例被创建时,该事件被触发它允许你创建可以由所有HttpApplication实例访问的对象
- Application_End:在HttpApplication类的最后一个实例被销毁时,该事件被触发在一个应用程序的生命周期内它只被触发一次 ·
- Application_BeginRequest:在接收到一个应用程序请求时触发对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)
- Application_EndRequest:针对应用程序请求的最后一个事件
等等。
这样,我们就可以在相应的事件里面写自己的方法。