AOP统一处理日志请求

一,添加依赖

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

二,在src/main/java下的某个包中新建类

package com.example.aop;
 
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.Enumeration;
 
@Aspect
@Component
public class WebLogAspect {
 
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    @Pointcut("execution(public * com.example.aop.controller..*.*(..))")
    public void weblog(){
 
    }
 
    @Before("weblog()")
    public void doBefore(JoinPoint joinPoint){
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录下请求内容
        logger.info("url    : " + request.getRequestURL().toString());
        logger.info("method : " + request.getMethod());
        logger.info("ip     : " + request.getRemoteAddr());
        Enumeration<String> enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String name = (String) enu.nextElement();
            logger.info("key:{},value:{}", name, request.getParameter(name));
        }
    }
 
    @AfterReturning(returning = "response", pointcut = "weblog()")
    public void doAfterReturning(Object response) throws Throwable {
        // 处理完请求,返回内容
        logger.info("response : " + response);
    }
 
 
}

测试

在controller中随便做的测试:

@RestController
public class HelloController {
    
    @RequestMapping("/aop")
    public String aop(String name){
        return "aop log "+name;
    }
    
}
 
2018-08-27 22:25:52.005  INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect             : url    : http://localhost:8080/aop
2018-08-27 22:25:52.005  INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect             : method : GET
2018-08-27 22:25:52.005  INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect             : ip     : 0:0:0:0:0:0:0:1
2018-08-27 22:25:52.005  INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect             : key:name,value:测试
2018-08-27 22:25:52.008  INFO 2928 --- [nio-8080-exec-1] com.example.aop.WebLogAspect             : response : aop log 测试

猜你喜欢

转载自blog.csdn.net/weixin_34090643/article/details/90783086