记录/审核403请求

时间:2012-05-10 23:13:50

标签: .net asp.net-mvc logging

我正在尝试使用.net mvc建立记录未经授权访问控制器/操作的最佳方法,基本上要求是:

  1. 如果他们没有登录,那么我们希望将他们重定向到登录页面
  2. 如果他们已登录但没有正确的页面凭据,那么我们要记录有关请求的信息,他们是谁,一些HttpRequest的东西等,然后将它们重定向到特定的未授权访问页面。
  3. 默认情况下,使用.net mvc [授权]属性过滤器显然处理

    1。 2我已部分实现,我创建了一个特定的Authorization属性,该属性扩展了Authorize操作过滤器,该过滤器覆盖了默认的HandleUnauthorizedRequest方法,以检查一些额外的东西并返回带有响应代码403的HttpResult。

    我无法实现其他部分,将信息记录到数据库中。当然有一个简单的解决方案,从自定义属性本身记录它,但感觉不对,感觉就像我让属性本身更聪明然后它应该是,在一天结束它应该知道关于限制访问而不是将信息记录到数据库。

    还有另一种解决方案,当它到达Unauthorized页面本身时记录它,感觉不是很糟糕,但仍然感觉不太正确。

    我个人希望能够在请求链中的某个地方处理它,但据我所知,我无法访问所有正确的信息。我试过环顾四周,但没有找到任何适合我们想要的解决方案。

    是否有人在那里实施了与我们的目标相似的内容,或者对于应该在何处实施这些内容有任何想法。

    谢谢, MD

1 个答案:

答案 0 :(得分:2)

创建一个新的IHttpModule并在EndRequest事件上记录作弊黑客......

E.g。

public class UnAuthorizedLoggerHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += ContextOnEndRequest;
    }

    private void ContextOnEndRequest(object sender, EventArgs eventArgs)
    {
        var app = sender as HttpApplication;

        if (app == null) return;

        if (app.Response.StatusCode == (int)HttpStatusCode.Forbidden)
        {
            //Log the error
            //All the user info should be in app.Request
        }
    }
}