asp.net – 如何设置Thread.CurrentPrincipal以在整个应用程序中
发布时间:2020-12-15 19:55:24 所属栏目:asp.Net 来源:网络整理
导读:在ASP.net应用程序中,我正在使用我编写的自定义成员资格提供程序的Login控件.我想要做的是在用户通过身份验证后将Thread.CurrentPrincipal设置为我的自定义Principal对象. 我正在使用setter:Thread.CurrentPrincipal,它为我设置了Principal对象,但是在所有
在ASP.net应用程序中,我正在使用我编写的自定义成员资格提供程序的Login控件.我想要做的是在用户通过身份验证后将Thread.CurrentPrincipal设置为我的自定义Principal对象.
我正在使用setter:Thread.CurrentPrincipal,它为我设置了Principal对象,但是在所有后续线程中,这个CurrentPrincipal被默认值覆盖. 这是我的Login控件的Authenticate事件的代码: protected void Login1_Authenticate(object sender,AuthenticateEventArgs e) { string username = Login1.UserName; string password = Login1.Password; if (Membership.ValidateUser(username,password)) { var login = sender as Login; var phoenixIdentity = new PhoenixIdentity("B","Forms",true); var principal = new PhoenixPrincipal(phoenixIdentity); Thread.CurrentPrincipal = principal; AppDomain.CurrentDomain.SetThreadPrincipal(principal); HttpContext.Current.User = principal; e.Authenticated = true; } } 例如,假设我使用用户名A登录,一切顺利…验证通过,但我使用Identity对象中的用户名B对用户进行硬编码,该对象设置为我设置为CurrentPrincipal对象的Principal对象. 当我在此方法结束时检查哪个用户设置为CurrentPrincipal Identity时,它表示它是用户B.但是当我加载另一个页面然后检查CurrentPrincipal的标识是什么时,它表示它是用户A. 那么,如何让我的CurrentPrincipal对象在所有其他线程中保持持久性,以及此Login控件何时/何时设置Thread的CurrentPrincipal对象? 解决方法
您可以处理FormsAuthentication_OnAuthenticate(对象发送者,FormsAuthenticationEventArgs e)(在Global.asax中)并在此处设置CurrentPrincipal.
void FormsAuthentication_OnAuthenticate(object sender,FormsAuthenticationEventArgs e) { var phoenixIdentity = new PhoenixIdentity("B",true); var principal = new PhoenixPrincipal(phoenixIdentity); e.User = principal; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 谈谈基于SQL Server 的Exception Handling[上篇]
- asp.net-core – 如何从控制器调用View组件
- asp.net-mvc – ASP.NET MVC 2发行版本的实际调试符号
- 我们可以将asp.net mvc 4应用程序部署到带有Windows容器的d
- asp.net-mvc – Kendo UI Grid – 显示行号
- 涉及 C#的 foreach问题
- asp.net – 使用Html.EditorFor生成具有特定行数和列数的te
- 是否可以在同一个asp.net网站上安装C#和vb.net?
- 获取ASP.NET会话上次访问时间(或超时)
- .net – 在没有区域的控制器中创建子文件夹
推荐文章
站长推荐
热点阅读