在我的AuthenticateRequest事件處理程序中,我設置了Thread的主體。 Here'a我的IHttpModule的一部分:ASP.net中的Thread.CurrentPrincipal.Identity - 可以安全使用
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 Local Storage中存儲請求特定的東西是不安全的,所以我想這與Thread.CurrentPrincipal是一樣的。或不?
聽起來好像你可以改變程序集 - 是不可能通過它需要的工作原理? –
最近在類似的情況下,我只是強迫調用者提供主要對象。 – asawyer
這就是我要做的 - 注入本金。無論如何,我希望有更好的方法 – dragonfly