springboot整合aop全局日志管理

Posted 新新人类

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot整合aop全局日志管理相关的知识,希望对你有一定的参考价值。

1.引入jar包

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
</dependency>

2.aop日志类

@Log4j2
@Aspect
@Component
public class WebLogAspect {

    @Pointcut("execution(public * io.renren.controller.*.*(..))")
    public void logCut() {
    }

    @Before("logCut()")
    public void doBefore(JoinPoint joinPoint) {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        log.info("请求地址 : " + request.getRequestURL().toString());
        log.info("参数 : " + Arrays.toString(joinPoint.getArgs()));
    }

    @Around("logCut()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object ob = pjp.proceed();// ob 为方法的返回值
        log.info("请求耗时 : " + (System.currentTimeMillis() - startTime) / 1000.0 + "s");
        return ob;
    }
}

再次启动项目,控制台将输出日志,并将日志写入到文件中

 

3.利用aop实现表单防重复提交

方法1:

1.后端生成一个唯一的提交令牌(token),并存储在缓存中。

2.页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。

 

方法2:

1.自定义注解 @NoRepeatSubmit 标记Controller中的提交请求

2.通过AOP 对所有标记了 @NoRepeatSubmit 的方法拦截

3.在业务方法执行前,获取当前用户的 token + 当前请求地址,作为一个唯一 KEY,去获取锁

4.业务方法执行后,释放锁

 

以上是关于springboot整合aop全局日志管理的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot全局日志管理(AOP)

SpringBoot整合AOP

重学SpringBoot系列之日志框架与全局日志管理

springboot整合aop实现网站访问日志记录

springboot AOP全局拦截日志记录

Spring Boot 使用 Aop 实现日志全局拦截