2009-05-01 15 views
6

W pliku global.asax dla Application_AuthenticationRequest ustawiam Thread.CurrentPrincipal na niestandardową nazwę użytkownika. Ustawiłem również HttpContext.Current.User na tę samą osobę.Thread.CurrentPrincipal ustawiony w Application_AuthenticationRequest nie jest ustawiony później w aplikacji

Jednak później w aplikacji, gdy trzeba rzucić Thread.CurrentPrincipal do naszego typu niestandardowego, otrzymuję błąd wykonania mówiąc: Nie można rzutować obiektu typu „System.Web.Security.RolePrincipal” wpisz „OurCustomPrincipal ".

jaki sposób Thread.CurrentPrincipal się zresetować do RolePrincipal i bardziej do punktu, w jaki sposób utrzymać ją w CustomPrincipal my ustalonym w global.asax

góry dzięki

Odpowiedz

6

pewno rozwiązało problemu teraz, ale tylko w przypadku, jeśli używasz RoleProvider z ASP.NET The RoleManagerModule nadpisuje obiekt GenericPrincipal utworzony przez FormsAuthenticationModule i zastępuje go z obiektem RolePrincipal podczas PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

+0

to dopiero zaczęło się dziać nie na niebiesko. Nie wiem dlaczego. dodanie '' rozwiązało problem. – tugberk

0

upewnij się, że zaimplementowałem klasę dla IIDentity & Interfejs Iprincipal, a następnie używasz czegoś takiego jak poniższy kod, aby przypisać aktualną osobę.

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

Podsumowując, szybka naprawa polega na zastąpieniu zamawiającego i tożsamości w module obsługi Application_OnPostAuthenticateRequest.

Powiązane problemy