Bên trong trình xử lý sự kiện AuthenticateRequest của tôi, tôi đã đặt hiệu trưởng của Thread. Here'a một phần của IHttpModule tôi:Thread.CurrentPrincipal.Identity trong ASP .NET - có an toàn không khi sử dụng
public void Init(HttpApplication context)
{
context.AuthenticateRequest += AuthenticateRequest;
}
private void AuthenticateRequest(object sender, EventArgs e)
{
var principal = CreatePrincipal();
HttpContext.Current.User = principal;
}
Nhưng tôi có một hội đồng, mà không cần phải truy cập vào System.Web, vì vậy tôi không thể sử dụng HttpContext.Current.User, nhưng tôi cần phải truy cập chính hiện hành. suy nghĩ đầu tiên của tôi là thay đổi phương pháp của tôi để:
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = principal;
và sử dụng Thread.CurrentPrincipal khi cần thiết.
Nhưng theo như tôi nhớ thì không an toàn để lưu trữ các yêu cầu cụ thể trong Thread Local Storage vì nhiều luồng có thể xử lý cùng một yêu cầu, vì vậy tôi đoán nó giống với Thread.CurrentPrincipal. Hay không?
Có vẻ như bạn có thể thay đổi lắp ráp - có thể không vượt qua được hiệu trưởng mà nó cần để chống lại không? –
Trong tình huống tương tự gần đây, tôi đơn giản buộc người gọi phải cung cấp đối tượng chính. – asawyer
Đó là những gì tôi sẽ làm - tiêm chính. Dù sao tôi đã hy vọng rằng có một cách tiếp cận tốt hơn – dragonfly