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

 

原文地址:https://www.cnblogs.com/xxrl-c/p/12195945.html

时间: 2024-08-01 13:57:16

springboot整合aop全局日志管理的相关文章

SpringBoot全局日志管理(AOP)

1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.创建WebLogAspect类 package com.cppdy.log; import java.util.Enumeration; import

Spring Boot 入门(五):集成 AOP 进行日志管理

本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页查询,Generator 代码自动生成器,Shiro登录及权限管理.本篇博客主要是集成 AOP 进行日志管理 1.导入 jar 包 1 <!-- aop --> 2 <dependency> 3 <groupId>org.springframework.boot</g

SpringBoot整合aop日志管理

1. 开发前准备 1.1 前置知识 java基础自定义注解.反射 Spring aop SpringBoot简单基础知识即可 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lombok.mybatisplus.Spring aop SpringBoot版本:2.1.4 1.3 涉及知识点 自定义注解. 反射 spring aop 环绕通知 2. aop日志实现 AOP(Aspect Oriented Programming)是一个大话题,这

SpringBoot 配置 AOP 打印日志

在项目开发中,日志系统是必不可少的,用AOP在Web的请求做入参和出参的参数打印,同时对异常进行日志打印,避免重复的手写日志,完整案例见文末源码. 一.Spring AOP AOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. AOP中有以下概念: Aspect(切面):声明类似于Java中的类声明,在Asp

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

目的: 统一日志输出格式,统计访问网站的ip. 思路: 1.针对不同的调用场景定义不同的注解,目前想的是接口层和服务层. 2.我设想的接口层和服务层的区别在于: (1)接口层可以打印客户端IP,而服务层不需要 (2)接口层的异常需要统一处理并返回,而服务层的异常只需要向上抛出即可 3.就像Spring中的@Controller.@Service.@Repository注解那样,虽然作用是一样的,但是不同的注解用在不同的地方显得很清晰,层次感一下就出来了 4.AOP去拦截特定注解的方法调用 5.为

springboot配置aop切面日志打印

一.SpringBoot Aop说明 1. Aop AOP(Aspect-Oriented Programming,面向切面编程),它利用一种”横切”的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 2. AOP相关概念: Aspect(切面):声明类似于Java中的类声明,在Aspect中会包含一些Pointcut及相应的Advice. Joint point(连接点):表示在程序中明确定义的点.包括方法的调

SpringBoot——整合aop

1.pom文件添加依赖 <!--面向切面--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.定义切面类:在类上添加@Aspect 和@Component 注解即可将一个类定义为切面类. @Aspect 使之成为切面类 @Com

spring-boot整合shiro实现权限管理

1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBoot-learn-demo/tree/master/spring-boot-shiro

【SpringBoot】SpingBoot整合AOP

https://blog.csdn.net/lmb55/article/details/82470388 一.示例应用场景:对所有的web请求做切面来记录日志. 1.pom中引入SpringBoot的web模块和使用AOP相关的依赖: 其中: cglib包是用来动态代理用的,基于类的代理: aspectjrt和aspectjweaver是与aspectj相关的包,用来支持切面编程的: aspectjrt包是aspectj的runtime包: aspectjweaver是aspectj的织入包: