根據您的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