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