在我的AuthenticateRequest事件处理程序中,我设置了Thread的主体。这是我的IHttpModule的一部分:
public void Init(HttpApplication context)
{
context.AuthenticateRequest += AuthenticateRequest;
}
private void AuthenticateRequest(object sender, EventArgs e)
{
var principal = CreatePrincipal();
HttpContext.Current.User = principal;
}
但我有一个程序集,不应该访问System.Web,所以我不能使用HttpContext.Current.User,但我需要访问当前主体。我的第一个想法是将我的方法改为:
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = principal;
并在需要时使用Thread.CurrentPrincipal。
但据我记得,在线程本地存储中存储请求特定的东西是不安全的,因为多个线程可以处理相同的请求,所以我猜它是相同的 Thread.CurrentPrincipal中。或不?