2010-08-17 6 views
6

Ich habe NHibernate benutzerdefinierten Kontext (ICurrentSessionContext) implementiert. In diesem Kontext injiziere ich die NHibernate-Sitzung, so dass ich Sitzung pro Anrufmuster-Setup habe. Ok, jetzt habe ich einen Interceptor erstellt, der userId des aktuell angemeldeten Benutzers annimmt. Jetzt mache ich das:Wie authentifizierte Benutzer-ID von wcf in Nhibernate erhalten

public ISession CurrentSession() 
{ 
    // Get the WCF InstanceContext: 
    var contextManager = OperationContext.Current.InstanceContext.Extensions.Find<NHibernateContextManager>(); 
    if (contextManager == null) 
    { 
    throw new InvalidOperationException(
     @"There is no context manager available. 
     Check whether the NHibernateContextManager is added as InstanceContext extension. 
     Make sure the service is being created with the NhServiceHostFactory. 
     This Session Provider is intended only for WCF services."); 
    } 

    var session = contextManager.Session; 
    AuditLogInterceptor interceptor = new AuditLogInterceptor(); 
    if (session == null) 
    { 
    session = this._factory.OpenSession(interceptor); 
    interceptor.Session = session; 

    contextManager.Session = session; 
    } 

    return contextManager.Session; 
} 

Mein AuditLogInterceptor nimmt UserId, aber ich weiß nicht, wie (von wo) diese userId zu bekommen.

Antwort

1

Wenn Ihr Benutzer authentifiziert ist, können Sie verwenden:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name 
0

Ich nehme an, dass der aktuelle Benutzer als der Prinzipal auf dem aktuellen Thread festgelegt wird?

Wenn ja, so etwas wie das ist, was Sie brauchen:

var userName = Thread.CurrentPrincipal.Identity.Name; 

Es gibt einige zusätzliche Informationen in this article, die hilfreich sein könnten.

Verwandte Themen