java操作日志板块

系统操作日志

自定义注解类MyLog


package com.pm.common.annotation;

import java.lang.annotation.*;

/**
 * 自定义注解类
 */
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行
@Documented //生成文档
public @interface MyLog {
    String value() default "";
}

Controller @MyLog(value=“添加加减分项”)

@MyLog(value="添加加减分项")

定义SysLogAspectController

package com.pm.common.aspect;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.pm.common.annotation.MyLog;
import com.pm.entity.po.security.OperatingLog;
import com.pm.entity.po.security.User;
import com.pm.service.security.OperatingLogService;
import com.pm.utils.HttpContextUtils;
import com.pm.utils.IPUtils;

/**
 * 系统日志:切面处理类
 */
@Aspect
@Component
public class SysLogAspect {

	@Autowired
	private OperatingLogService operatingLogService;

	// 定义切点 @Pointcut
	// 在注解的位置切入代码
	@Pointcut("@annotation(com.pm.common.annotation.MyLog)")
	public void logPoinCut() {
	}

	// 切面 配置通知
	@AfterReturning("logPoinCut()")
	public void saveSysLog(JoinPoint joinPoint) {
		// 保存日志
		OperatingLog sysLog = new OperatingLog();

		// 从切面织入点处通过反射机制获取织入点处的方法
		MethodSignature signature = (MethodSignature) joinPoint.getSignature();
		// 获取切入点所在的方法
		Method method = signature.getMethod();
		/*
		 * //返回结果获取
		 * Response response=new Response<>();
		 * System.out.println(signature.getReturnType().cast(response));
		 * System.out.println(response.getCode());
		 */
		// 获取操作
		MyLog myLog = method.getAnnotation(MyLog.class);
		if (myLog != null) {
			String value = myLog.value();
			sysLog.setOperation(value);// 保存获取的操作
		}

		// 获取请求的类名
		String className = joinPoint.getTarget().getClass().getName();
		// 获取请求的方法名
		String methodName = method.getName();
		sysLog.setMethod(className + "." + methodName);

		// 请求的参数
		Object[] args = joinPoint.getArgs();
		// 将参数所在的数组转换成json
		String params = JSON.toJSONString(args);

		sysLog.setParams(params);
		HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
		// 获取用户名
		User user = null;
		try {
			user = (User) request.getAttribute("CurrentUser");
		} catch (Exception e) {
			user = new User(String.valueOf(args[0]), String.valueOf(args[1]));
		}
		if(user==null) {
			user = new User(String.valueOf(args[0]), String.valueOf(args[1]));
		}
		sysLog.setUsername(user.getUsername());
		// 获取用户ip地址
		sysLog.setIp(IPUtils.getIpAddr(request));

		// 调用service保存SysLog实体类到数据库
		operatingLogService.add(sysLog);
	}

}

定义Service

package com.pm.service.security;

import com.pm.entity.po.security.OperatingLog;
import com.pm.service.BaseService;


public interface OperatingLogService extends BaseService<OperatingLog>{

}

定义Impl

/**
 * Title: OperatingLogServiceImpl.java
 * @author WuJin
 * @date 2020年6月16日
 * @version 1.0
 */
package com.pm.service.security.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.pm.entity.po.security.OperatingLog;
import com.pm.mapper.security.OperatingLogMapper;
import com.pm.service.impl.BaseServiceImpl;
import com.pm.service.security.OperatingLogService;

@Service
public class OperatingLogServiceImpl extends BaseServiceImpl<OperatingLog> implements OperatingLogService {

	@Resource
	public void setBasemapper(OperatingLogMapper operatingLogMapper) {
		super.setBaseMapper(operatingLogMapper);
	}
}

定义Mapper

定义Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pm.mapper.security.OperatingLogMapper">
  <resultMap id="BaseResultMap" type="com.pm.entity.po.security.OperatingLog">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="operation" jdbcType="VARCHAR" property="operation" />
    <result column="method" jdbcType="VARCHAR" property="method" />
    <result column="params" jdbcType="VARCHAR" property="params" />
    <result column="ip" jdbcType="VARCHAR" property="ip" />
    <result column="model_value" jdbcType="TIMESTAMP" property="modelValue" />
    <result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
  </resultMap>
  
  <sql id="queryLog">
		SELECT g.*
		FROM
		operating_log AS g
	</sql>

	<insert id="add" parameterType="com.pm.entity.po.security.Group">
		INSERT INTO operating_log
		(username,
		operation,
		method,
		params,
		ip,
		model_value
		)
		VALUES(
		#{username},
		#{operation},
		#{method},
		#{params},
		#{ip},
		#{modelValue})
	</insert>

	<select id="loadById" resultMap="BaseResultMap">
		<include refid="queryLog" />
		WHERE
		g.id = #{id}
	</select>

	<select id="getList" resultMap="BaseResultMap">
		<include refid="queryLog" />
		where 1=1 
		<if test="username!=null and username!=''">
			and g.username=#{username}
		</if>
		<if test="operation!=null and operation!=''">
			and g.opration=#{operation}
		</if>
	</select>

	<select id="load" resultType="com.pm.entity.po.security.Group">
		<include refid="queryLog" />
		WHERE
		g.id = #{id}
	</select>
</mapper>

MySql数据库

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值