как получить аутентифицированный идентификатор пользователя из wcf в nhibernate - PullRequest
6 голосов
/ 17 августа 2010

Я реализовал пользовательский контекст NHibernate (ICurrentSessionContext). В этом контексте я внедряю сессию NHibernate, поэтому у меня есть Сеанс для каждого шаблона звонка. Хорошо, теперь я сделал перехватчик, который принимает userId текущего зарегистрированного пользователя. Теперь я делаю это:

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;
}

Мой AuditLogInterceptor принимает идентификатор пользователя, но я не знаю, как (откуда) получить этот идентификатор пользователя.

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Если ваш пользователь аутентифицирован, вы можете использовать:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name
0 голосов
/ 17 августа 2010

Я полагаю, что текущий пользователь устанавливается в качестве принципала в текущем потоке?

Если это так, вам нужно что-то вроде этого:

var userName = Thread.CurrentPrincipal.Identity.Name;

Есть некоторые дополнительныеинформация в этой статье , которая может оказаться полезной.

...