Appfuse:记录操作日志
生活随笔
收集整理的這篇文章主要介紹了
Appfuse:记录操作日志
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
appfuse的數(shù)據(jù)維護操作都發(fā)生在***form頁面,與之對應的是***FormController,在Controller中處理數(shù)據(jù)的操作是onSubmit方法,既然所有的操作都通過onSubmit,那么只需要攔截onSubmit并記錄對應的參數(shù)即可作為操作日志。
首先要攔截Controller層的方法就需要在dispatcher-servlet.xml中配置攔截器,如下:
<aop:config><aop:advisor id="submitTx" advice-ref="txSubmitAdvice"pointcut="execution(* *..controller.*Controller.onSubmit(..))" order="0" /></aop:config><bean id="txSubmitAdvice" class="com.zcmp.xunji.service.SubmitAdvice"/> dispatcher-servlet.xml接下來在Service中定義自己的AOP攔截器
package com.disappearwind.service;import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.AfterReturningAdvice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails;import com.disappearwind.model.BaseObject; import com.disappearwind.model.Role; import com.disappearwind.model.Syslog; import com.disappearwind.model.User;import java.lang.reflect.Method; import java.util.Date; import java.util.Set;import javax.servlet.http.HttpServletRequest;/*** 對Controller中的onSubmit方法監(jiān)聽,記錄用戶的操作日志* * @author mraible*/ public class SubmitAdvice implements AfterReturningAdvice, MethodInterceptor {private final Log log = LogFactory.getLog(SubmitAdvice.class);private UserManager userManager = null;private GenericManager<Syslog, Long> syslogManager;@Autowiredpublic void setSyslogManager(@Qualifier("syslogManager") GenericManager<Syslog, Long> syslogManager) {this.syslogManager = syslogManager;}@Autowiredpublic void setUserManager(UserManager userManager) {this.userManager = userManager;}/*** 在用戶的業(yè)務操作執(zhí)行完之后記錄操作日志* * @param returnValue* the user object* @param method* the name of the method executed* @param args* the arguments to the method* @param target* the target class* @throws Throwable* thrown when args[0] is null or not a Base object*/public void afterReturning(Object returnValue, Method method,Object[] args, Object target) throws Throwable {// 方法簽名:String onSubmit(AppToken appToken, BindingResult errors,// HttpServletRequest request,HttpServletResponse response)try {if (args[0] instanceof BaseObject) {BaseObject obj = (BaseObject) args[0];HttpServletRequest request = (HttpServletRequest) args[2];// 發(fā)生在哪個ModelString modelName = obj.getClass().getSimpleName();// Model中的數(shù)據(jù)String modelData = obj.toString();// 操作類型,request參數(shù)中sava就是Save,request參數(shù)中有delete則是DeleteString action = "Save";if (null != request.getParameter("delete")) {action = "Delete";}// 記錄操作日志到數(shù)據(jù)庫Syslog syslog = new Syslog();syslog.setModule(modelName + "." + action);syslog.setContent(modelData);syslog.setCreateDate(new Date());syslog.setCreator(getCurrentUserID());syslogManager.save(syslog);}} catch (Exception ex) {log.error(ex);}}/*** 獲取當前操作的用戶* * @return 用戶ID*/private Long getCurrentUserID() {Long userID = 0l;SecurityContext ctx = SecurityContextHolder.getContext();if (ctx.getAuthentication() != null) {Authentication auth = ctx.getAuthentication();UserDetails user = (UserDetails) auth.getPrincipal();userID = this.userManager.getUserByUsername(user.getUsername()).getId();}return userID;} } SubmitAdvice注意,其中有一段是獲取當前登錄用戶的ID的getCurrentUserID。
Syslog是自己定義的存儲日志的數(shù)據(jù)結構。
轉(zhuǎn)載于:https://www.cnblogs.com/disappearwind/p/4644956.html
總結
以上是生活随笔為你收集整理的Appfuse:记录操作日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 2411 Mondriaan#3
- 下一篇: FireMonkey 导出目前 Styl