zoukankan      html  css  js  c++  java
  • 切面保存web访问记录

    package com.hn.xf.device.api.rest.aspect;
    import com.hn.xf.device.api.rest.authorization.manager.TokenManager;
    import com.hn.xf.device.api.rest.authorization.model.TokenModel;
    import com.hn.xf.device.api.rest.config.Constants;
    import com.hn.xf.device.service.log.service.AppLogService;
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    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 javax.servlet.http.HttpServletRequest;
    import java.util.Arrays;
    
    /**
     * @Created with IntelliJ IDEA.
     * @author: fengshufang
     * @Date: 2018/1/22
     * @Description APP日志
     */
    @Aspect
    @Component
    @Slf4j
    public class WebLogAspect {
        @Autowired
        AppLogService appLogService;
        @Autowired
        private TokenManager manager;
    
        @Pointcut("execution(public * com.hn.xf.device.api.rest.controller..*(..))")
        public void webLog() {
        }
    
        @Before("webLog()")
        public void doBefore(JoinPoint joinPoint) throws Throwable {
            // 接收到请求,记录请求内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            String authorization = request.getHeader(Constants.AUTHORIZATION);
            String user="";
            String cpid = request.getHeader(Constants.CPID);
            if (cpid == null ) {
                //验证token
                TokenModel model = manager.getToken(authorization);
                if(model!=null)
                {
                    user=model.getUserId().toString();
                }
            }
            else {
                user=cpid;
            }
            if (Arrays.toString(joinPoint.getArgs()).toString().length() < 500) {
                appLogService.add(user, joinPoint.getSignature().getName(), request.getRequestURL().toString() + request.getRemoteAddr() + Arrays.toString(joinPoint.getArgs()).toString());
            } else {
                String tempData = Arrays.toString(joinPoint.getArgs()).toString().substring(0,499);
                appLogService.add(user, joinPoint.getSignature().getName(), request.getRequestURL().toString() + request.getRemoteAddr() + tempData);
    
            }
    
        }
    
        @AfterReturning(returning = "ret", pointcut = "webLog()")
        public void doAfterReturning(Object ret) throws Throwable {
            // 处理完请求,返回内容
            //log.info("RESPONSE : " + ret);
        }
    
    }
    

      

  • 相关阅读:
    SOJ 4580 动态规划之01背包 (01背包)
    文件比较与同步工具——FreeFileSync
    肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化
    JAVA学习笔记(4)—— 排序算法
    JAVA学习笔记(3)—— 抽象类与接口
    JAVA学习笔记(2)—— java初始化三个原则
    JAVA学习笔记(1)—— eclipse自动补全和主题及字体配置
    3D Slicer中文教程(八)—导出STL文件
    3D Slicer中文教程(七)—图像中值滤波
    “Excel-建议不可用于您所选择的数据”错误提示
  • 原文地址:https://www.cnblogs.com/anakin/p/8907324.html
Copyright © 2011-2022 走看看