2009-05-01 3 views
6

In der Datei global.asax für die Application_AuthenticationRequest ich den Thread.CurrentPrincipal auf einen benutzerdefinierten Prinzipal festlegen. Ich habe auch den HttpContext.Current.User auf den gleichen Prinzipal gesetzt.Thread.CurrentPrincipal in Application_AuthenticationRequest festgelegt wird später in der App nicht festgelegt

jedoch später in der App, wenn ich die Thread.CurrentPrincipal unserer Gewohnheit Typ umwandeln müssen, bekomme ich einen Laufzeitfehler zu sagen: Konnte nicht das Objekt des Typs ‚System.Web.Security.RolePrincipal‘ werfen ‚eingeben OurCustomPrincipal ".

Wie hat sich die Thread.CurrentPrincipal erhalten Roleprincipal zurückgesetzt und mehr auf den Punkt, wie kann ich es halten an der Custom wir in der global.asax gesetzt

Vielen Dank im Voraus

Antwort

6

Sie sicher Ihr Problem jetzt gelöst haben, aber nur für den Fall, wenn Sie die Roleprovider von ASP.NET verwenden, überschreibt der Rolemanagermodule die Generic Objekt durch die FormsAuthenticationModule erstellt und ersetzt es durch ein Roleprincipal Objekt während der PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

+0

dies begann gerade aus heiterem Himmel. Weiß nicht warum. Das Hinzufügen von '' löste das Problem. – tugberk

0

überprüfen Sie bitte, dass Sie habe eine Klasse für IIDentity & Iprincipal Interface implementiert und dann verwenden Sie etwas wie den folgenden Code, um das aktuelle Principal zuzuweisen.

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

Zusammenfassend besteht eine schnelle Lösung darin, Ihre Principal- und Identitätsersetzungen stattdessen auf dem Handler Application_OnPostAuthenticateRequest auszuführen.

Verwandte Themen