ASP.NET 如何在应用程序请求模块中访问 User.Identity.IsAuthenticated?
Posted
技术标签:
【中文标题】ASP.NET 如何在应用程序请求模块中访问 User.Identity.IsAuthenticated?【英文标题】:ASP.NET how to access User.Identity.IsAuthenticated in Aplication Request module? 【发布时间】:2012-06-27 01:17:37 【问题描述】:我在 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 函数中访问用户对象?
【问题讨论】:
免责声明 - 我没有在 IIS 下运行 PHP 的经验。但是,IIS 有某些类型配置为由 Asp.Net 处理,我不希望 php 由 Asp.Net 处理,因此 Context 将为空。 上下文不为空。上下文对象的请求和响应都在工作。 ONLY Request.User 为空。 那么 Request.IsAuthenticated 返回什么 - 真/假?可能是您启用了匿名访问吗?我也是found这个:runAllManagedModulesForAllRequests="true" Request.IsAuthenticated 总是返回 false。我刚刚在 ASP.NET 论坛上阅读了该主题。是的!添加“将以下内容添加到您的 web.config 文件中:
<modules runAllManagedModulesForAllRequests="true" />
【讨论】:
我发现了关于 Google Chrome 的一件有趣的事情。如果请求文件是 .aspx,它看起来很好,它会重定向到登录页面,但是当它是 .pdf 或 .jpg 时,它会像无限循环一样不断尝试,但它仍然可以保护资源。它在所有其他浏览器上都可以正常工作,除了 google chrome。【参考方案2】:HttpApplication.PostAuthenticateRequest Event
将 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;
【讨论】:
它仍然显示“对象引用未设置为对象的实例。”。关于“bool isAuthenticated = ((HttpApplication)sender).Context.User.Identity.IsAuthenticated;” 奇怪,NULL 到底是什么?上下文用户?它应该在 ASP.NET 生命周期的那个时刻定义。 这个问题的最佳答案!以上是关于ASP.NET 如何在应用程序请求模块中访问 User.Identity.IsAuthenticated?的主要内容,如果未能解决你的问题,请参考以下文章