簡體   English   中英

C#清除線程主體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM