1. 程式人生 > >對功能的監控,操作資訊記錄(參考:本例是對使用者的操作記錄)

對功能的監控,操作資訊記錄(參考:本例是對使用者的操作記錄)

package com.zc.spring.aop; import com.alibaba.fastjson.JSON; import com.zc.entity.sys.User; import com.zc.entity.sys.UserLog; import com.zc.service.sys.UserOperationService; import com.zc.spring.filter.CommonConstant; import com.zc.util.DateUtil; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; /** * 使用者操作切面配置 * 功能說明: 使用者操作後,記錄操作資訊 * * @author caoliang * @date 2018/2/24 */ @Aspect @Component public class UserOperationAop { @Autowired private UserOperationService userOperationService; /** * 日誌 */ private final static Logger logger = LoggerFactory.getLogger(UserOperationAop.class); /** * 判斷是否新增資訊 */ public static Map<String, LinkedHashMap<String, Object>> userBeanMap = new HashMap<>(16);
@Pointcut("execution(* com.zc.controller.sys.UserController.insertuser(..))") public void insertUser() { // 新增賬戶 } @Pointcut("execution(* com.zc.controller.sys.UserController.updateuser(..))") public void updateUser() { // 修改賬號 } //註解到具體的方法 @Pointcut("execution(* com.zc.controller.sys.UserController.deleteuser(..))")
public void deleteUser() { // 刪除賬號 }

//實現對具體任務的日誌監控 @Around("insertUser()") public void insert(ProceedingJoinPoint pjp) throws Throwable { UserLog userLog = new UserLog(); userLog.setType("新增"); doAround(pjp, userLog); } @Around("updateUser()") public void update(ProceedingJoinPoint pjp) throws Throwable { UserLog userLog = new UserLog(); userLog.setType("修改"); doAround(pjp, userLog); }

@Around("deleteUser()")
public void delete(ProceedingJoinPoint pjp) throws Throwable { UserLog userLog = new UserLog(); userLog.setType("刪除"); //具體的操作 doAround(pjp, userLog); }


public Object doAround(ProceedingJoinPoint pjp, UserLog userLog) throws Throwable { Object result = null; try { // 將操作記錄插入日誌表中 if (insertOperationLog(pjp, userLog)) { // 執行controller中的上報工單方法 result = pjp.proceed(); } else { Map<String, Object> map = new HashMap<>(); map.put(CommonConstant.EXECSTATE, "false"); map.put(CommonConstant.EXECMSG, "插入失敗"); return JSON.toJSONString(map); } } catch (Throwable throwable) { logger.error("使用者操作記錄插入攔截器報錯:\n", throwable); } return result; } /** * 插入使用者操作日誌 * * @return * @throws Exception */ private boolean insertOperationLog(ProceedingJoinPoint pjp, UserLog userLog) throws Exception { try { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); HttpSession session=request.getSession(); User a =this.getSessionUser(session); String operator= String.valueOf(a.getUserid()); User u = getRequestWorkOrderBean(pjp); String addTime = DateUtil.getStringFromDate(new Date(), null); String remarks=operator+userLog.getType()+"一條資訊"+"使用者ID為"+u.getUserid(); UserLog user = new UserLog(); user.setOperatorDate(addTime); user.setUserid(u.getUserid()); user.setOperator(operator); user.setType(userLog.getType()); user.setRemarks(remarks); userOperationService.insertUser(user); } catch (Exception e) { logger.error("workOrderCheckIfTheSame執行報錯:\n", e); } return true; } /** * 獲取請求引數中的資訊 * * @param pjp * @return */ private User getRequestWorkOrderBean(ProceedingJoinPoint pjp) { User bean = null; String userids = ""; try { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); if (request == null) { return null; } Object[] params = pjp.getArgs(); for (Object param : params) { System.out.println("123====================" + params[1]); if (param instanceof User) { bean = (User) param; } if (param instanceof String[]) { System.out.println("123===================="); String[] a = (String[]) param; userids = a[0]; }
} //請求的引數 if (bean == null) { bean = new User(); bean.setUserid(Long.parseLong(userids));
} } catch (Exception e) { logger.error("解析請求引數時異常:\n", e); } return bean; } protected User getSessionUser(HttpSession session) { return (User) session.getAttribute(CommonConstant.CUR_USER); } }