aop记录日志操作
在對應(yīng)方法上添加注解:
@OperationLog(operationType= OperationType.INSERT,operationBu="隱患",operationContent="新增隱患")日志參數(shù)默認值設(shè)置:
public enum OperationType {UNKNOWN("unknown"),DELETE("delete"),SELECT("select"),UPDATE("update"),INSERT("insert");private String value;public String getValue() {return value;}public void setValue(String value) {this.value = value;}OperationType(String s) {this.value = s;} } @Documented @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface OperationLog {//操作內(nèi)容String operationContent() default "";//操作類型OperationType operationType() default OperationType.UNKNOWN;//操作業(yè)務(wù)模塊String operationBu() default "";}記錄日志
import com.alibaba.fastjson.JSON; import com.zhjt.annotation.OperationLog; import com.zhjt.security.UserUtil; import lombok.Getter; import lombok.Setter; 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.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.UUID;/*** @ClassName OpLog* @Description 日志切面類* @Author wang* @Date 2019/10/29 16:07**/ @Component @Aspect public class OpLog {@Getter@Setter@Value("${spring.datasource.url}")private String url;@Getter@Setter@Value("${spring.datasource.username}")private String user;@Getter@Setter@Value("${spring.datasource.password}")private String password;public OpLog(){System.out.println("-----日志初始化");}@Pointcut("@annotation(com.zhjt.annotation.OperationLog)")private void log() {}@Around("log()")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {PreparedStatement pst = null;Connection conn = null;Object res = null;System.out.print("進入日志記錄頁面");MethodSignature signature = (MethodSignature)joinPoint.getSignature();try {res = joinPoint.proceed();return res;} finally {try {//獲取到攔截的接口的方法名 // String methodName = joinPoint.getSignature().getName();//被攔截的方法的參數(shù)名稱數(shù)組 // String[] parameterNames = signature.getParameterNames();//被攔截的方法的參數(shù)值對象數(shù)組,這里我們將傳入的參數(shù)轉(zhuǎn)為json字符串格式便于存入數(shù)據(jù)庫//1.加載驅(qū)動程序Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2.獲得數(shù)據(jù)庫鏈接conn= DriverManager.getConnection(url, user, password);//方法執(zhí)行完成后增加日志OperationLog annotation = signature.getMethod().getAnnotation(OperationLog.class);String content = annotation.operationContent();String type = annotation.operationType().getValue();String bu = annotation.operationBu();String uid = UserUtil.getCurrUserId();String id = UUID.randomUUID().toString();Object[] objects = joinPoint.getArgs();StringBuilder args = new StringBuilder("");//暫時只記錄刪除操作if("delete".equals(type)){for (int i = 0; i < objects.length; i++) {String s = JSON.toJSONString(objects[i]);if (i == objects.length - 1){args.append(s);}else {args.append(s).append(",");}}}String businessId = "";//記錄修改if("update".equals(type)) {if(bu.equals("菜單管理")) {args.append(objects[0]);}}String inSql = "insert into opreate_log (id,operate_man,operate_content,operate_type,operate_time,operate_bu,operate_opinions) values(?,?,?,?,GETDATE(),?,?)";pst = conn.prepareStatement(inSql);pst.setString(1,id);pst.setString(2,uid);pst.setString(3,content);pst.setString(4,type);pst.setString(5,bu);pst.setString(6,args.toString());pst.execute();}catch (Exception e){e.printStackTrace();}finally {pst.close();conn.close();}}} }總結(jié)
- 上一篇: mybatis批量更新报错XXXXX-I
- 下一篇: js屏幕截图