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.业务方法执行后,释放锁

 

猜你喜欢

转载自www.cnblogs.com/xxrl-c/p/12195945.html