加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何使用NHibernate Envers记录当前用户

发布时间:2020-12-16 09:46:37 所属栏目:asp.Net 来源:网络整理
导读:我查看了如何在Envers的修订实体表中记录当前用户的用户名.但是,信息很少,而我设法找到的信息并没有那么有用. 我有一个修订实体和监听器,如下所示: [RevisionEntity(typeof(EnversRevisionListener))]public class EnversRevisionEntity : DefaultRevisionE
我查看了如何在Envers的修订实体表中记录当前用户的用户名.但是,信息很少,而我设法找到的信息并没有那么有用.

我有一个修订实体和监听器,如下所示:

[RevisionEntity(typeof(EnversRevisionListener))]
public class EnversRevisionEntity : DefaultRevisionEntity
{
    public virtual string UserName { get; set; }
}

public class EnversRevisionListener : IRevisionListener
{
    private string _userName = "unknown";

    public EnversRevisionListener(string userName)
        : base()
    {
        _userName = userName;
    }

    public void NewRevision(object revisionEntity)
    {
        var casted = revisionEntity as EnversRevisionEntity;

        if (casted != null)
        {
            casted.UserName = _userName;
        }
    }
}

我想在ASP.NET环境中使用这两个.配置和会话工厂创建一次,因为这是一个昂贵的操作.对于每个事务,将打开一个新会话.

从这个NHE Jira问题和相关的,SO question我明白在配置nHibernate时可以用监听器注册用户名.

但是,这对我来说不够好,因为它会为每个事务注册首先连接到应用程序的用户名.

我需要能够向侦听器提供与特定事务相关的用户名.

以前,我使用nHibernate的更新前和更新后事件监听器来使用穷人的审计.这里I faced a similar problem这些监听器也与会话工厂相关联而不是会话.因此我切换到旧式拦截器,它可以与OpenSession中的会话相关联.这允许我将当前用户添加到拦截器.

但是,我不知道如何为Envers解决同样的问题.我希望有人能帮帮忙.

解决方法

您可以使用Thread.CurrentPrinicpal属性( MSDN). ASP.NET成员资格机制将其设置为与当前登录用户关联的标识

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读