SpringBoot-AOP切面处理

    应用Spring的过程中,最大最核心的必须要数AOP啦,比如,向同一水平面上的相同业务操作,我们就可以使用AOP来完成,快速方便,简单安全;如拦截,验证,或者SpringMVC中的事物AOP配置等等..,

    1: 首先引入jar包

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

    2: 编写切面类

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就会看到拦截信息;

    参考: https://www.imooc.com/video/14341

    项目源码: https://gitee.com/ge.yang/SpringBoot

转载于:https://my.oschina.net/u/3681868/blog/1595947

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值