2

我在 ASP.Net 中使用表单身份验证方法,问题是它只保护“ .aspx”文件。我正在尝试保护“ kcfinder”文件夹中的“.php”文件免受未经身份验证的用户的侵害。

我在“App_Code”文件夹中实现了这个类。

public class KCChecker
{
        public static void Process(HttpApplication Application)
    {
           HttpRequest Request = Application.Context.Request;
           HttpResponse Response = Application.Context.Response;
           string url = Request.Path.ToLower();
           if (url.IndexOf("/kcfinder/") == 0 && !HttpContext.Current.User.Identity.IsAuthenticated)
            {
            Response.Redirect("/");
            }
        }
}

问题是它总是说“对象引用未设置为对象的实例”。上HttpContext.Current.User.Identity.IsAuthenticated。我尝试将其更改为,Application.Context.User.Identity.IsAuthenticated但仍然显示相同的错误。

有什么方法可以在这个自定义模块的 Process 函数中访问用户对象吗?

4

2 回答 2

2

将以下内容添加到您的 web.config 文件中:

<modules runAllManagedModulesForAllRequests="true" />
于 2012-06-27T08:50:24.803 回答
1

HttpApplication.PostAuthenticateRequest 事件

将 PostAuthenticateRequest 的事件处理程序添加到您的 HttpModule 并从那里调用您的 Process(HttpApplication) 方法。

public class AuthModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostAuthenticateRequest += new EventHandler(context_PostAuthenticateRequest);
    }

    public void Dispose() { }

    void context_PostAuthenticateRequest(object sender, EventArgs e)
    {
        var isAuthenticated = ((HttpApplication) sender).Context.User.Identity.IsAuthenticated;
    }
}
于 2012-06-27T02:39:40.833 回答