springboot+aop,拦截操作日志,登录日志

1.pom.xml文件

<!-- spring aop -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>1.3.6.RELEASE</version>
</dependency>

2.登录日志

@Aspect
@Component
public class AspectInterceptor {

    @Autowired
    LoginLogService loginLogService;
    @Autowired
    OperateLogService operateLogService;
    @Autowired
    UserService userService;
    @Autowired
    SqlSessionFactory sqlSessionFactory;

    private Logger log = Logger.getLogger(AspectInterceptor.class);
    ThreadLocal<Long> startTime = new ThreadLocal<>();

    @Pointcut("execution(public * com.test.blue.*Controller.login(..))")//断点位置
    public void loginWebLog() {
    }

    @Pointcut("execution(public * com.test.blue.service.Services.*(..))")//断点位置
    public void operateWebLog() {
    }


    /**
     * 登录日志
     */
    @Before("loginWebLog()")
    public void doBeforeLogin() {
        //当前的毫秒时间
        startTime.set(System.currentTimeMillis());
    }

    /**
     * 登录日志
     *
     * @param joinPoint
     * @param returnValue
     */
    @AfterReturning(returning = "returnValue", pointcut = "loginWebLog()")
    public void doAfterReturning(JoinPoint joinPoint, Object returnValue) {
        long elsTime = (System.currentTimeMillis() - startTime.get()) / 1000;
        if (returnValue.equals(true)) {
            //returnValue为true,表示登录成功.记录登录日志
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            String sessionId = request.getRequestedSessionId();
            LoginUser loginUser = (LoginUser) request.getSession().getAttribute(sessionId);
            LoginLog loginLog = new LoginLog();
            loginLog.setLoginIp(ServletUtil.getRemortIP(request));
            loginLog.setRemark("登录");
            loginLog.setLoginType(1);
            loginLog.setUserName(loginUser.userId);
            loginLog.setLoginTime(new Date());
            loginLog.setUserAgent(request.getHeader("user-agent"));
            loginLog.setElapsedTime(elsTime);
            loginLogService.insert(loginLog);
        }
    }

    

    /**
     * 操作日志
     */
    @Before("operateWebLog())")
    public void operateBeforeOperate(JoinPoint joinPoint) {
        String method = joinPoint.getSignature().getName();
        if (method.equals("insert") || method.equals("delete") || method.equals("update")) {
            startTime.set(System.currentTimeMillis());
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
            String className = joinPoint.getTarget().getClass().toString();

            if (className.equals("OperateLog") || className.equals("LoginLog")) {
                return;
            }
            if (method.equals("insert")) {
                String classTypeName = className.substring(className.lastIndexOf(".") + 1, className.lastIndexOf("Service"));    //打印请求内容
                String operateTable = classTypeName.substring(0, 1).toLowerCase() + classTypeName.substring(1);
                System.out.println("===============请求内容===============");
                System.out.println("请求地址:" + request.getRequestURL().toString());
                System.out.println("请求方式:" + request.getMethod());
                System.out.println("请求方法:" + joinPoint.getSignature().getName());
                System.out.println("请求类方法:" + joinPoint.getSignature());
                System.out.println("请求类方法参数:" + JSON.toJSONString(joinPoint.getArgs()[0]));
//                getInsertSql(() joinPoint.getArgs()[0], classTypeName, operateTable);
                System.out.println("===============请求内容===============");
            } else if (method.equals("delete")) {

            } else if (method.equals("update")) {

            } else {
                System.out.println(method);
            }
        }

    }

    @AfterReturning(returning = "returnValue", pointcut = "operateWebLog()")
    public void operateAfterReturning(JoinPoint joinPoint, Object returnValue) {
        String method = joinPoint.getSignature().getName();

        if (method.equals("insert") || method.equals("delete") || method.equals("update")) {
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
            long elTime = (System.currentTimeMillis() - startTime.get()) / 1000;
            String className = joinPoint.getTarget().getClass().toString();
            String classTypeName = className.substring(className.lastIndexOf(".") + 1, className.lastIndexOf("Service"));

            if (classTypeName.contains("OperateLog") || classTypeName.contains("LoginLog")) {
                return;
            }
            String operateTable = classTypeName.substring(0, 1).toLowerCase() + classTypeName.substring(1);
            String sessionId = request.getRequestedSessionId();
            LoginUser loginUser = (LoginUser) request.getSession().getAttribute(sessionId);
            OperateLog operateLog = new OperateLog();
            operateLog.setUserName(loginUser.userId);
            operateLog.setElapsedTime(elTime);
            operateLog.setExecType(method);
            operateLog.setCreateTime(new Date());
            operateLog.setExecParam(JSON.toJSONString(joinPoint.getArgs()[0]));
            operateLog.setExecTable(operateTable);
            operateLog.setOperateIp(ServletUtil.getRemortIP(request));

            if (method.equals("insert")) {
                String sql = "insert  into "+ operateTable+" " +operateLog.getExecParam();
                operateLog.setExecSql(sql);System.out.println("--------------返回内容----------------");
                System.out.println("Response内容:" + JSON.toJSONString(returnValue));
                System.out.println("--------------返回内容----------------");
                operateLogService.insert(operateLog);

            } else if (method.equals("delete")) {
                String sql = "delete from "+ operateTable+" where id =" +operateLog.getExecParam();
                operateLog.setExecSql(sql);
                operateLogService.insert(operateLog);
                System.out.println("--------------返回内容----------------");
                System.out.println("Response内容:" + JSON.toJSONString(returnValue));
                System.out.println("--------------返回内容----------------");

            } else if (method.equals("update")) {
                String sql = "update from "+ operateTable+" values " +operateLog.getExecParam();
                operateLog.setExecSql(sql);
                operateLogService.insert(operateLog);
                System.out.println("Response内容:" + JSON.toJSONString(returnValue));

            } else {
                System.out.println(method);

            }
        }


    }


}

转载于:https://my.oschina.net/u/2263272/blog/871982

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值