2009-05-01 28 views
6

在Application_AuthenticationRequest的global.asax文件中,我將Thread.CurrentPrincipal設置爲自定義主體。我也將HttpContext.Current.User設置爲相同的主體。Application_AuthenticationRequest中設置的Thread.CurrentPrincipal稍後未在應用程序中設置

但是,在我需要將Thread.CurrentPrincipal強制轉換爲我們的自定義類型時,出現運行時錯誤: 無法強制類型爲'System.Web.Security.RolePrincipal'的對象輸入'OurCustomPrincipal 」。

怎麼將得到Thread.CurrentPrincipal中重置RolePrincipal,多到我如何保持它在CustomPrincipal點我們在Global.asax設置

在此先感謝

回答

6

你肯定已經通過,但現在爲了以防萬一,解決你的問題,如果你是從ASP.NET使用RoleProvider時,RoleManagerModule覆蓋由FormsAuthenticationModule創建了GenericPrincipal對象,並在一個RolePrincipal對象替換它PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

+0

這纔剛剛開始發生。不知道爲什麼。加入``解決了這個問題。 – tugberk 2013-06-05 11:38:10

0

請確認您已經爲IIDentity & Iprincipal接口實現了一個類,然後使用類似下面的代碼來指定currentprincipal。

Dim userIdentity As CustomIdentity 
    userIdentity = New CustomIdentity(username, True,"forms", sessionId) 

    Dim principal As New CustomPrincipal(userIdentity, arrRoles) 
    HttpContext.Current.User = principal 
    System.Threading.Thread.CurrentPrincipal = principal 
3

總結一下,一個快速解決方法是在Application_OnPostAuthenticateRequest處理程序上執行您的主體和身份替換。

相關問題