这个是自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthChecker {
}
@Component //声明组件
@Aspect // 声明切面
public class LogAop extends BaseController {
/**
* 自定义日志
*/
private Logger logger = LoggerFactory.getLogger(LogAop.class);
/**
* 功能描述 service切面
*
* @param * @param
* @return void
* @author
* @date 2021/6/9
*/
//定义一个切入点
@Pointcut("execution(public * com.esp.espplay.play.service.impl.*.*(..))")
public void webLog() {
}
long startTime = System.currentTimeMillis();
@Before("webLog()")
public void doBefore(JoinPoint point) {
logger.info("方法" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName() + "执行开始");
logger.info("入参为"+ JSON.toJSONString(((MethodSignature)point.getSignature()).getParameterNames())+" : "+ JSON.toJSONString(point.getArgs()));
}
// @After("webLog()")
// public void doAfter(JoinPoint point){
// logger.info(System.currentTimeMillis()-startTime/1000f +"秒!"+"----------------------");
// }
/**
* 功能描述 controller切面
*这个是通过注解实现的
* @param * @param
* @return void
* @author
* @date 2021/6/9
*/
@Pointcut("@annotation(com.esp.espplay.play.aop.AuthChecker)")
public void webContro() {
}
/**
* 功能描述 controller切面
*
* @param * @param
* @return void
* @author
* @date 2021/6/9
*/
@Pointcut("execution(public * com.esp.espplay.play.controller.*.*(..))")
public void webController() {
}
// 定义 advise
@Around("webContro()")
public ResponseEntity<ResultModel> checkAuth(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
// 检查用户所传递的 token 是否合法
String token = getUserToken(request);
if (!token.equalsIgnoreCase("123456")) {
return responseEntity("错误, 权限不合法!");
}
return responseEntity(joinPoint.proceed());
}
private String getUserToken(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies == null) {
return "";
}
for (Cookie cookie : cookies) {
if (cookie.getName().equalsIgnoreCase("token")) {
return cookie.getValue();
}
}
return "";
}
@Before("webController()")
public void doBeforeController(JoinPoint point) {
logger.info("方法" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName() + "执行开始");
logger.info("入参为"+ JSON.toJSONString(((MethodSignature)point.getSignature()).getParameterNames())+" : "+ JSON.toJSONString(point.getArgs()));
}
}
效果图