SpringBoot-AOP切面處理

    應用Spring的過程當中,最大最核心的必需要數AOP啦,好比,向同一水平面上的相同業務操做,咱們就能夠使用AOP來完成,快速方便,簡單安全;如攔截,驗證,或者SpringMVC中的事物AOP配置等等..,java

    1: 首先引入jar包git

<dependency><!-- AOP面向切面 -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

    2: 編寫切面類web

package com.gy.demo.common.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * Description: HTTP請求攔截
 * 面向切面: AOP
 * 註解: @Component : 將類注入到Spring容器中;
 * 註解: @Aspect :  聲明AOP處理
 * 註解: @Pointcut :  聲明攔截地址
 * 註解: @Before : 在Value中的方法  以前  都進行攔截
 * 註解: @After : 在Value中的方法  以後  都進行攔截
 * 註解: @AfterReturning : 在Value中的方法  以後  都進行攔截,並獲取返回的數據
 * @author geYang
 * @since 2017/12/28
 **/
@Aspect
@Component
public class HttpAspect {

	private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
	
	@Pointcut("execution(public * com.gy.demo.controller.*.*.*(..))")
	public void logger(){}
	
	
	@Before("logger()")
	public void doBefore(JoinPoint joinPoint){
		ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = servletRequestAttributes.getRequest();
		//ip
		logger.info("user_ip={}",request.getRemoteAddr());
		//url
		logger.info("request_url={}",request.getRequestURL());
		//method
		logger.info("request_method={}",request.getMethod());
		//類方法
		logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
		//參數
		logger.info("request_param={}",joinPoint.getArgs());
		
	}
	
	@After("logger()")
	public void doAfter(){
		logger.info("出來了");
	}
	
	@AfterReturning(returning = "object",pointcut = "logger()")
	public void doAfterReturning(Object object){
		logger.info("response={}",object==null?null:object.toString());
	}
	
}

    啓動項目,訪問Controller就會看到攔截信息;spring

    參考: https://www.imooc.com/video/14341安全

    項目源碼: https://gitee.com/ge.yang/SpringBootide

相關文章
相關標籤/搜索