应用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