在我的Struts2应用程序中,我想使用Hibernate拦截器审核所有CURD操作,请帮助我如何实现。
You can create an interceptor by extending the EmptyInterceptor
, read the documentation:
Chapter 12. Interceptors and events
The documentation has an example on how to implement auditing using interceptors.
Also here is another example for similar functionality : Hibernate interceptor example – audit log
You can create XXXDAO
class by implementing Interceptor or by extending EmptyInterceptor
. If You use Interceptor
interface , using below overridden method save the data in separate table.
public boolean onLoad(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean onFlushDirty(Object o, Serializable srlzbl, Object[] os, Object[] os1, String[] strings, Type[] types) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean onSave(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void onDelete(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void onCollectionRecreate(Object o, Serializable srlzbl) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void onCollectionRemove(Object o, Serializable srlzbl) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void onCollectionUpdate(Object o, Serializable srlzbl) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void preFlush(Iterator itrtr) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void postFlush(Iterator itrtr) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public Boolean isTransient(Object o) {
throw new UnsupportedOperationException("Not supported yet.");
}
public int[] findDirty(Object o, Serializable srlzbl, Object[] os, Object[] os1, String[] strings, Type[] types) {
throw new UnsupportedOperationException("Not supported yet.");
}
public Object instantiate(String string, EntityMode em, Serializable srlzbl) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public String getEntityName(Object o) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public Object getEntity(String string, Serializable srlzbl) throws CallbackException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void afterTransactionBegin(Transaction t) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void beforeTransactionCompletion(Transaction t) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void afterTransactionCompletion(Transaction t) {
throw new UnsupportedOperationException("Not supported yet.");
}
public String onPrepareStatement(String string) {
throw new UnsupportedOperationException("Not supported yet.");
}
If You extends EmptyInterceptor
no need to override all the methods, required methods can override in your dao class.
For example I have to store fieldName
, fieldValue
, fieldType
, className
in my Audit table, for save()
method.
//Audit save Pojo
public class AuditSave{
private String className;
private String fieldName
private String fieldValue
private String fieldType
//setter's and getter's
}
//AuditDAO class
public class AuditDao exteds EmptyInterceptor{
public boolean onSave(Object o, Serializable srlzbl, Object[] os, String[] strings,
Type[] types) throws CallbackException {
Session session = HibernateUtil.getSessionFactory().openSesson();
String className = o.getClass().getName();
try{
Transaction tx = session.beginTransaction();
for(int i = 0;i < os.length ;i++){
AuditSave auditSave = new AuditSave();
auditSave.setClassName(className);
auditSave.setFieldName((String)strings[i]);
auditSave.setFieldValue((String)os[i]);
auditSave.setFieldType(types[i].toString());
session.save(auditSave);
tx.commit();
}catch(Exception e){
tx.rollback();
e.printStackTra;
}
if(session.isOpen())
session.close();
}
return true;
}
// same as update,delete
For delete use onDelete()
method, For update use findDirty()
method
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.