NHibernate事件监听器 - 在它中使用HttpContext.CurrentUser是否安全?

时间:2013-11-08 12:42:16

标签: c# nhibernate

我正在使用NHibernate事件监听器在数据库中生成事件日志,我正在使用HttpContext.CurrentUser获取当前用户ID并将其写入数据库字段。

SessionFactory实例是singleton,事件监听器也根据文档,所以我想知道是否有可能的情况,当当前用户已经改变时,事件监听器将调用HttpContext.CurrentUser,这意味着在事件中将记录用户与变化无关?

如果从不同的线程产生更改,如果事件处理时HttpContext可能不为null并且错误的用户将被写入事件表,该怎么办?

2 个答案:

答案 0 :(得分:2)

Httpcontext是线程安全的,因此不存在http上下文会为该实例意外更改的情况。它依赖于线程上下文来返回特定用户的正确数据。

答案 1 :(得分:0)

我做了类似的事情,但我检查确保HttpContext.CurrentUser不为null。如果在另一个dll中定义eventlistener,则前端可以是Web应用程序或本地exe或用于单元测试目的。在这种情况下,HttpContext.CurrentUser将为null。

        if (HttpContext.Current != null)
            return HttpContext.Current.User.Identity.Name;

        return WindowsIdentity.GetCurrent().Name;