使用AOP面向切面编程 (日志Mysql记录)

0 篇文章 0 订阅

1,创建Log表 

ID主键
USER操作人
OPERATION操作
METHOD操作方法路径
IP操作IP地址
USERAGENT用户代理
PARAMS操作提交的数据
EXCEPTION异常信息
BEGINDATE操作时间
URL请求地址URL
URI资源标志
REQUESTTYPEGet/post
OSNAME操作系统名称
OSVERSION操作系统版本
......

 

2,自定义注解

/**
 * 自定义注解类
 */
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解
public @interface MyLog {
	String desc() default ""; //定义返回参数
}

 

3,Log entity ,service,dao, 略。。。。

4,

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

	@Autowired
	private LogService LogService;

	// 定义切点 @Pointcut
	// 在注解的位置切入代码
    //reg 处放你定义的注解路径
	@Pointcut("@annotation(reg)
	public void logPoinCut() {
	}

	// 切面 配置通知
	@After("logPoinCut()")
	public void saveLog(JoinPoint joinPoint) {
		// 保存日志
		User user = (User) UserUtils.getUser();
		if (user != null) {

			Log Log = new Log();

			// 从切面织入点处通过反射机制获取织入点处的方法
			MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            // 获取切入点所在的方法
			Method method = signature.getMethod();

			// 获取操作
			MyLog annotation = signature.getMethod().getAnnotation(MyLog.class);
            String desc = "";
            if (annotation != null) {
                desc = annotation.desc();
            }
            Log.setOperation(desc);
			// 获取请求的类名
			String className = joinPoint.getTarget().getClass().getName();
			// 获取请求的方法名
			String methodName = method.getName();
			Log.setMethod(className + "." + methodName);

			Log.setBeginDate(new Date());
			
			// 接收到请求,记录请求内容
			HttpServletRequest request = 
            ((ServletRequestAttributes)
            equestContextHolder.getRequestAttributes()).getRequest();
			
			 //客户端操作系统
			Log.setOsName(System.getProperty("os.name"));
            //客户端操作系统版本
			Log.setOsVersion(System.getProperty("os.version"));
            //客户端浏览器的版本类型
            Log.setUserAgent(request.getHeader("user-agent"));
            //请求ip 
        	Log.setIp(IpUtils.getIpAddr(request)+"  "+request.getRemoteAddr());
            //请求url
        	Log.setUrl(request.getRequestURL().toString());
            //请求uri
        	Log.setUri(request.getRequestURI());
        	//请求方式 get,post等
            Log.setRequestType(request.getMethod());
			 
			Log.setParams(request.getParameterMap());
			Log.setQyId(user.getQyId());
			// 调用service保存Log实体类到数据库
			LogService.save(Log);
		}
	}

}

5,

    @RequiresPermissions("user")
	@RequestMapping(value = { "list" })
	@MyLog(desc = "调用")
	public viod list(SysGzhzxx args,Model model) {
    }

6,如果没用 查看是否 aop 的加包是否存在,

7,jar包存在 查看Application中是否开启@EnableAspectJAutoProxy注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值