根据您的Hibernate版本,您可能能够使用Envers来适应细粒度的审计日志记录。这包括从会话变量添加“当前用户”到给定的修订的能力:
@Entity
@RevisionEntity(ExampleListener.class)
public class ExampleRevEntity extends DefaultRevisionEntity {
private String username;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
这与Hibernate集成很好地通过一系列的事件监听器,它可以叫出春天像这样:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
<property name="eventListeners">
<map>
<entry key="post-insert" value-ref="enversEventListener"/>
<entry key="post-update" value-ref="enversEventListener"/>
<entry key="post-delete" value-ref="enversEventListener"/>
<entry key="pre-collection-update" value-ref="enversEventListener"/>
<entry key="pre-collection-remove" value-ref="enversEventListener"/>
<entry key="post-collection-recreate" value-ref="enversEventListener"/>
</map>
</property>
</bean>
然后您可以通过Envers查询api查询审计修订版。
在最近的几个项目中使用它之后,这是我使用Hibernate时的首选审计技术。
applicationContext.getBean("currentUser", User.class);
只要你的用户设置:
要回答你的问题,你就可以建立一个Hibernate拦截或Envers RevisionListener通过从当前Spring上下文中查找来访问“当前用户”作为Spring中的scoped bean。
我一直在测试,一切都按我的预期感谢 – Kossel