麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Appfuse:記錄操作日志

2019-11-15 00:52:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Appfuse:記錄操作日志

appfuse的數(shù)據(jù)維護(hù)操作都發(fā)生在***form頁(yè)面,與之對(duì)應(yīng)的是***FormController,在Controller中處理數(shù)據(jù)的操作是onSubmit方法,既然所有的操作都通過(guò)onSubmit,那么只需要攔截onSubmit并記錄對(duì)應(yīng)的參數(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

接下來(lái)在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;/** * 對(duì)Controller中的onSubmit方法監(jiān)聽(tīng),記錄用戶的操作日志 *  * @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;    @Autowired    public void setSyslogManager(            @Qualifier("syslogManager") GenericManager<Syslog, Long> syslogManager) {        this.syslogManager = syslogManager;    }    @Autowired    public void setUserManager(UserManager userManager) {        this.userManager = userManager;    }    /**     * 在用戶的業(yè)務(wù)操作執(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ā)生在哪個(gè)Model                String modelName = obj.getClass().getSimpleName();                // Model中的數(shù)據(jù)                String modelData = obj.toString();                // 操作類型,request參數(shù)中sava就是Save,request參數(shù)中有delete則是Delete                String action = "Save";                if (null != request.getParameter("delete")) {                    action = "Delete";                }                // 記錄操作日志到數(shù)據(jù)庫(kù)                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);        }    }    /**     * 獲取當(dāng)前操作的用戶     *      * @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

注意,其中有一段是獲取當(dāng)前登錄用戶的ID的getCurrentUserID。

Syslog是自己定義的存儲(chǔ)日志的數(shù)據(jù)結(jié)構(gòu)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 91精品国产91久久久 | 2019中文字幕在线播放 | 亚洲视频在线观看免费视频 | 欧美一级黄色录像片 | 亚洲精品成人18久久久久 | 亚洲午夜久久久精品一区二区三区 | 中文在线观看视频 | 国产精品9191 | 中国hdxxxx护士爽在线观看 | 男女一边摸一边做羞羞视频免费 | 日本娇小18xxxⅹhd | 亚洲国产精品久久久久制服红楼梦 | 中文字幕亚洲情99在线 | 成人福利电影在线观看 | 二区三区四区 | 狠狠色噜噜狠狠狠米奇9999 | 日日操夜 | 7777网站| 精精国产xxxx视频在线野外 | 国产色视频在线观看免费 | 亚洲日本韩国精品 | 国产精品91久久久 | 欧美高清第一页 | 巨乳激情| 精品国产一区二区三区四区在线 | 天堂成人国产精品一区 | 日韩欧美电影在线观看 | 91专区在线观看 | 免费黄色小视频网站 | 综合网天天色 | 久久国产一级 | 精品国产91久久久久久浪潮蜜月 | 羞羞的动漫在线观看 | 国产成人精品网站 | 欧美日穴视频 | 欧美一级免费高清 | 国产 日韩 亚洲 欧美 | 麻豆911| 2017亚洲男人天堂 | 手机在线看片国产 | 欧美精品亚洲人成在线观看 |