SpringBoot系列(6)——使用AOP处理请求

前言:

    假如咱们须要作一个功能——受权访问,即对全部的方法的访问以前须要判断用户是否登录,只有登录的用户才能够访问方法。对于这个情景,若是选择在每个方法内加上用户登陆判断,那么就会形成大量的代码冗余,由此引出AOP的使用。java

    使用AOP(面向切面编程),咱们能够把判断用户是否登录做为一个切面,插入到每个方法执行的各个位置。web

    这里,咱们以记录请求日志为例子,记录下SpringBoot中AOP的使用:spring

1. 加入aop依赖

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

2. 创建处理文件

(chrome中右键选“在新标签中打开图片”便可查看大图)chrome

源码以下:编程

package com.example.demo.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
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;

@Aspect
@Component
public class HttpAspect {
    
    private static final Logger logger= LoggerFactory.getLogger(HttpAspect.class);

    @Pointcut("execution(public * com.example.demo.controller.StudentController.*(..))")
    public void log(){}

    @Before("log()")
    public void doBefore(JoinPoint joinPoint){
        //url
        ServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request=attributes.getRequest();
        logger.info("url={}",request.getRequestURL());
        //method
        logger.info("method={}",request.getMethod());
        //ip
        logger.info("ip={}",request.getRemoteAddr());
        //类方法
        logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+ "." +joinPoint.getSignature().getName());
        //参数
        logger.info("args={}", joinPoint.getArgs());
    }

    @After("log()")
    public void doAfter(){
        logger.info("2222222222222");
    }

    @AfterReturning(returning = "object",pointcut = "log()")
    public void doAfterReturning(Object object){
        logger.info("response={}",object);
    }


}
相关文章
相关标签/搜索