`
daichangfu
  • 浏览: 264704 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate EmptyInterceptor审计日志实现

阅读更多
@MappedSuperclass
public abstract class BaseAuditModel extends BaseCrmModel{
	/**
	 * UID
	 */
	private static final long serialVersionUID = 8886136517524378574L;

	public abstract String[][] getAuditPropertys(); //需要审计的字段名称
	
}

 

@Entity
@Table(name = "crm_user")
public class UserModel extends BaseAuditModel{

	/**
	 * UID
	 */
	private static final long serialVersionUID = 1L;
	
	private String userName; //用户名
	private String mobile;	//手机号
	private String address; //住址

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getMobile() {
		return mobile;
	}

	public void setMobile(String mobile) {
		this.mobile = mobile;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String[][] getAuditPropertys() {
		//需要审计的字段/解释
		return new String[][]{{"userName", "用户名"}, {"mobile","手机号"}, {"address", "住址"}};
	}

	@Override
	public String getModelName() {
		return "用户信息";
	}

}

 

public class LogEntityInterceptor extends EmptyInterceptor {
	/**
	 * UID
	 */
	private static final long serialVersionUID = 1L;
	
	private Logger log = Logger.getLogger(LogEntityInterceptor.class);
	
	@Override
	public void onDelete(Object entity, Serializable id, Object[] state,
			String[] propertyNames, Type[] types) {

		log.info("删除数据 onDelete...");
		
	}
	
	@Override
	public boolean onSave(Object entity, Serializable id, Object[] state,
			String[] propertyNames, Type[] types) {
		log.info("保存数据 onSave...");
		return false;
	}
	
	
	@Override
	public boolean onFlushDirty(Object entity, Serializable id,
			Object[] currentState, Object[] previousState,
			String[] propertyNames, Type[] types) {
		log.info("修改数据 onFlushDirty..." + entity.getClass());
		if(entity instanceof BaseAuditModel){
			BaseAuditModel audit = (BaseAuditModel) entity;
			if(audit.getAuditPropertys() != null && previousState != null){
				log.info(audit.getModelName());
				log.info("id: "+audit.getId());
				Map<String, String> map = MapUtils.putAll(new HashMap(), audit.getAuditPropertys());
				for(int i=0, len=previousState.length; i<len; i++){
					if(previousState[i]!=null 
							&& map.get(propertyNames[i]) != null
							&& !previousState[i].equals(currentState[i])){
						log.info(propertyNames[i]+"/"+map.get(propertyNames[i])+":原值="+previousState[i]+",新值="+currentState[i]);
					}
				}
			}
		}
		return false;
	}
	
}

 

<!-- Hibernate审计日志拦截器 -->
<bean id="logEntityInterceptor" class="com.hzwealth.app.crm.LogEntityInterceptor" />

<bean id="sessionFactory"  ............. >
   ................
   <property name="entityInterceptor" ref="logEntityInterceptor"/>
   ................
</bean>

 

分享到:
评论

相关推荐

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    接着,为了实现审计日志,我们需要在项目中引入Hibernate Envers的依赖。在Maven的pom.xml文件中,可以添加如下依赖: ```xml &lt;groupId&gt;org.hibernate &lt;artifactId&gt;hibernate-envers &lt;version&gt;5.x.y.Final...

    Hibernate日志jar包

    日志jar包则是Hibernate为了实现日志记录功能而依赖的组件,这对于调试、性能监控和问题排查至关重要。 在Java开发中,日志记录是一项基础且重要的任务,它能够帮助开发者追踪程序运行状态,定位错误源,并收集运行...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...

    hibernate框架日志文件

    hibernate框架日志文件,用于对hibernate框架运行记录日志的;

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    spring hibernate 日志管理插件

    数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...

    基于Struts 2和Hibernate的Blog实现

    **基于Struts 2和Hibernate的Blog实现** 在IT领域,构建一个博客系统是常见的实践项目,用于学习和展示Web开发技术。本项目利用Struts 2和Hibernate这两个流行的Java框架,实现了一个基本的博客系统。Struts 2是MVC...

    配置 Hibernate 日志

    【标题】:“配置 Hibernate 日志” 【描述】:在 Java 的开发环境中,Hibernate 是一个非常流行的 ORM(对象关系映射)框架,它极大地简化了数据库操作。然而,为了确保应用程序的稳定性和性能优化,理解并配置 ...

    springmvc+hibernate 日志管理工具

    数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...

    hibernate3 最简单实现项目

    【hibernate3 最简单实现项目】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本项目基于Hibernate3,将介绍如何实现最简单的查询功能,并且提供了必要的jar包以供...

    最新配套的hibernate包,日志为log4j,hibernate二级缓存包等

    试验了很多版本,这套hibernate包算是比较理想的配套包,分别有:antlr-2.7.6.jar ,backport-util-concurrent.jar, commons-collections-3.1.jar, commons-logging-1.1.1.jar,dom4j-1.6.1.jar,ehcache-1.5.0....

    struts2+hibernate实现登录及增删改操作

    综上所述,"struts2+hibernate实现登录及增删改操作"涉及到的是如何利用这两个框架构建一个完整的Java Web应用,包括用户身份验证、数据库操作以及对数据的增删改等核心功能。这个小案例可以帮助开发者理解并熟练...

    微博系统Hibernate+strus2实现

    此外,Struts2还支持拦截器机制,允许自定义拦截规则,实现如权限验证、日志记录等功能,增强了应用程序的可扩展性和可维护性。 接着,Hibernate作为持久层框架,它简化了Java对象与数据库之间的交互。Hibernate...

    Spring+Hibernate实现用户登录

    本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...

    Spring-Struts2-Hibernate登录打印日志

    在这个“Spring-Struts2-Hibernate登录打印日志”的主题中,我们将深入探讨如何在SSH框架下实现用户登录功能,并记录相关的日志信息。 首先,让我们了解SSH框架的核心组件: 1. **Spring**:Spring框架是整个应用...

    JSP+Hibernate实现留言板

    **JSP+Hibernate实现留言板详解** 在Web开发中,创建一个功能完善的留言板系统是一项常见的任务。这个系统通常涉及用户交互、数据存储以及后端逻辑处理。在这个案例中,我们使用了Java服务器页面(JSP)作为视图层...

    Hibernate Many to Many 实现方式二

    Hibernate Many to Many 实现方式

    Hibernate实现原理模拟

    **Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...

Global site tag (gtag.js) - Google Analytics