[英]C# clearing the thread principal
如何清除c#中的線程主體。
我有一個后台線程,它做了一個
Membership.ValidateUser(username, password);
然后將生成的Principal復制回主線程
AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal);
這很好用。 但是,如果我注銷我想清除主體,如果我將它設置為null它什么都不做Thread.CurrentPrincipal = null; 如果我嘗試通過再次設置它
AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal);
我收到了錯誤
Default principal object cannot be set twice.
有任何想法嗎?
解決這個問題的技巧是創建一個facade主體並將其分配給線程。 然后在它后面你可以切換當前用戶的新用戶。
我不認為你可以在不關閉AppDomain並重新創建它的情況下重置主體。 你只能在調用SetThreadPrincipal時獲得一次機會。
假設您正在使用自己在ValidateUser之后創建的自定義主體對象; 您可以在主體上放置一個“Logout”方法,將其內部狀態重置為未經身份驗證的用戶。
如果您只想設置主線程的主體,則將引用傳遞給后台線程,然后使用CurrentPrincipal屬性設置主體。
例如mainThead.CurrentPrincipal = Thread.CurrentPrincipal。
完成后將其設置為原始主體
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.