样例:登陆拦截(aop简单样例)
第一步:在pom 文件中加入aop依赖
<!-- spring aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
第二步:建立处理文件
package com.payease.aspect;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* Created by liuxiaoming on 2017/11/7.
*/
@Aspect
@Component
public class HttpAspect {
//日志 为logger.info()提供
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
/**
* 公共方法
*/
@Pointcut("execution(public * com.payease.controller.GirlController.*(..))")
public void log(){
logger.info("@Pointcut 公共方法:拦截请求aop!");
}
/**
* 方法执行之前
*/
//@Before("execution(public * com.payease.controller.GirlController.*(..))")
@Before("log()")
public void doBefore(){
logger.info("1。@Before 拦截请求aop!");
}
/**
* 方法执行之后
*/
@After("log()")
public void doAfter(){
logger.info("2。@After 拦截请求aop!");
}
}
第三步:controller中的方法(未做改动)
//日志
private final static Logger logger = LoggerFactory.getLogger(GirlController.class);
@Autowired
private GirlRespository girlRespository;
@GetMapping("/girls")
public List<Girl> girlList(){
logger.info("girlList方法!");
return girlRespository.findAll();
}
第四步:启动项目 postman提交 查看控制台
aop获取http请求中的内容:
第一步:修改处理文件中的doBefore方法 新增获取返回值的方法
package com.payease.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;
/**
* Created by liuxiaoming on 2017/11/7.
*/
@Aspect
@Component
public class HttpAspect {
//日志 为logger.info()提供
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
/**
* 公共方法
*/
@Pointcut("execution(public * com.payease.controller.GirlController.*(..))")
public void log(){
logger.info("@Pointcut 公共方法:拦截请求aop!");
}
/**
* 方法执行之前
*/
//@Before("execution(public * com.payease.controller.GirlController.*(..))")
@Before("log()")
public void doBefore(JoinPoint joinPoint){
logger.info("1。@Before 拦截请求aop!");
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//url
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("2。@After 拦截请求aop!");
}
/**
* 获取返回值
* @param object
*/
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object){
logger.info("response={}",object.toString());
}
}
第二步:Girl对象新增toString()方法
package com.payease.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.validation.constraints.Min; /** * Created by liuxiaoming on 2017/11/6. */ @Entity public class Girl { @Id @GeneratedValue private int id; private String cupSize; @Min(value=18,message = "未成年少女禁止入内!") private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCupSize() { return cupSize; } public void setCupSize(String cupSize) { this.cupSize = cupSize; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Girl{" + "id=" + id + ", cupSize='" + cupSize + '\'' + ", age=" + age + '}'; } }
启动项目,postman提交 查看控制台