2009-05-01 15 views
6

Nel file global.asax per Application_AuthenticationRequest sto impostando Thread.CurrentPrincipal su un'entità personalizzata. Ho anche impostato HttpContext.Current.User sullo stesso principal.Thread.CurrentPrincipal impostato in Application_AuthenticationRequest non è impostato più avanti nell'app

Tuttavia nel corso della applicazione quando ho bisogno di lanciare il Thread.CurrentPrincipal al nostro tipo personalizzato, ottengo un errore di runtime dicendo: Impossibile eseguire il cast oggetto di tipo 'System.Web.Security.RolePrincipal' digitare 'OurCustomPrincipal '.

Come ha fatto il Thread.CurrentPrincipal reimpostato a RolePrincipal, e più al punto come faccio la tiene a CustomPrincipal abbiamo impostato nel global.asax

Grazie in anticipo

risposta

6

È sicuramente hanno risolto il problema, ormai, ma solo nel caso in cui, se si utilizza il RoleProvider da ASP.NET, il RoleManagerModule sovrascrive l'oggetto GenericPrincipal creato dal FormsAuthenticationModule e lo sostituisce con un oggetto durante la RolePrincipal PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

+0

questo appena iniziato accadendo inaspettatamente. Non sa perché. aggiungendo '' ha risolto il problema. – tugberk

0

Verificare che si ho implementato una classe per IIDentity & Iprincipal interface e quindi stai usando qualcosa come il seguente codice per assegnare il principio corrente.

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

Per riassumere, una soluzione rapida consiste nell'eseguire le sostituzioni di identità e principale sul gestore Application_OnPostAuthenticateRequest.

Problemi correlati