SpringMVC利用AOP实现自定义注解记录日志

SpringMVC利用AOP实现自定义注解记录日志

1、interface Log


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author: football98
 * @createTime: 16-6-23
 * @classDescription: 日志annotation类。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface Log {
    String name() default "";
}

2、LogAop


import java.lang.reflect.Method;
import java.util.Date;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import zteict.qinhuangdao.framework.base.annotation.Log;
import zteict.qinhuangdao.framework.base.po.Tlog;
import zteict.qinhuangdao.framework.base.service.BaseService;
import zteict.qinhuangdao.framework.common.security.vo.LoginUserVO;
import javax.servlet.http.HttpServletRequest;

/**
 * @author: football98
 * @createTime: 16-6-23
 * @classDescription: 日志aop类。
 */
@Aspect
@Component
public class LogAop {

    @Autowired
    private BaseService baseService;

    private ThreadLocal<Long> startTime = new ThreadLocal<Long>();

    private String loginName;

    @Before("@annotation(zteict.qinhuangdao.framework.base.annotation.Log)")
    public void beforeExec(JoinPoint joinPoint){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //获取操作用户
        LoginUserVO vo = (LoginUserVO)request.getSession().getAttribute("LOGINUSER");
        startTime.set(System.currentTimeMillis());
        if(vo != null&&!vo.getLoginname().equals("")){
            loginName = vo.getLoginname();
        }
    }

    @After("@annotation(zteict.qinhuangdao.framework.base.annotation.Log)")
    public void afterExec(JoinPoint joinPoint){
        long endtime = System.currentTimeMillis();
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //获取操作方法
        MethodSignature ms = (MethodSignature) joinPoint.getSignature();
        Method method = ms.getMethod();
        //保存日志对象
        Tlog log = new Tlog();
        log.setTlogmethod(method.getName());
        log.setTlogname(method.getAnnotation(Log.class).name());
        if(loginName!=null&&!loginName.equals("")){
            log.setTloguser(loginName);
            log.setTlogip(request.getRemoteAddr());
            log.setTlogdate(new Date(endtime));
            log.setTlogtime((endtime - startTime.get())+"ms");
            baseService.save(log);
        }else{
            LoginUserVO vo = (LoginUserVO)request.getSession().getAttribute("LOGINUSER");
            if(vo != null&&!vo.getLoginname().equals("")){
                log.setTloguser(vo.getLoginname());
                log.setTlogip(request.getRemoteAddr());
                log.setTlogdate(new Date(endtime));
                log.setTlogtime((endtime - startTime.get())+"ms");
                baseService.save(log);
            }
        }
    }
}
3、springmvn如果要使用aop注解,必须进行如下配置

	<aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值