ApiCetPlugControllerAspect.java 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.qmth.cet.plug.aspect;
  2. import com.qmth.boot.api.exception.ApiException;
  3. import com.qmth.cet.plug.contant.SystemConstant;
  4. import com.qmth.cet.plug.util.JacksonUtil;
  5. import com.qmth.cet.plug.util.ResultUtil;
  6. import com.qmth.cet.plug.util.ServletUtil;
  7. import org.aspectj.lang.ProceedingJoinPoint;
  8. import org.aspectj.lang.annotation.Around;
  9. import org.aspectj.lang.annotation.Aspect;
  10. import org.aspectj.lang.annotation.Pointcut;
  11. import org.aspectj.lang.reflect.MethodSignature;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.stereotype.Component;
  15. import org.springframework.validation.BeanPropertyBindingResult;
  16. import org.springframework.web.multipart.MultipartFile;
  17. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  18. import javax.servlet.http.HttpServletRequest;
  19. import javax.servlet.http.HttpServletResponse;
  20. import java.util.Objects;
  21. import java.util.StringJoiner;
  22. /**
  23. * @Description: api aspect
  24. * @Param:
  25. * @return:
  26. * @Author: wangliang
  27. * @Date: 2020/5/12
  28. */
  29. @Aspect
  30. @Component
  31. public class ApiCetPlugControllerAspect {
  32. private final static Logger log = LoggerFactory.getLogger(ApiCetPlugControllerAspect.class);
  33. /**
  34. * api切入点
  35. */
  36. @Pointcut("execution(public * com.qmth.cet.plug.api.*.*(..))")
  37. public void apiAspect() {
  38. }
  39. /**
  40. * 后台环绕切入
  41. *
  42. * @param joinPoint
  43. * @return
  44. * @throws Throwable
  45. */
  46. @Around(value = "apiAspect()")
  47. public Object aroundApiPoint(ProceedingJoinPoint joinPoint) throws Throwable {
  48. long start = System.currentTimeMillis();
  49. StringJoiner stringJoiner = new StringJoiner("");
  50. try {
  51. MethodSignature msig = (MethodSignature) joinPoint.getSignature();
  52. String className = msig.getDeclaringTypeName();
  53. String methodName = msig.getName();
  54. Object[] args = joinPoint.getArgs();
  55. String[] paramsName = msig.getParameterNames();
  56. HttpServletRequest request = ServletUtil.getRequest();
  57. stringJoiner.add("============请求地址============:").add(request.getServletPath()).add("\r\n");
  58. stringJoiner.add("============类============:").add(className).add("\r\n");
  59. stringJoiner.add("============方法============:").add(methodName).add("\r\n");
  60. if (Objects.nonNull(args) && args.length > 0) {
  61. for (int i = 0; i < args.length; i++) {
  62. if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
  63. continue;
  64. } else {
  65. stringJoiner.add("参数key:").add(JacksonUtil.parseJson(paramsName[i])).add(",参数value:").add(JacksonUtil.parseJson(args[i])).add("\r\n");
  66. }
  67. }
  68. }
  69. return joinPoint.proceed();
  70. } catch (Exception e) {
  71. log.error(SystemConstant.LOG_ERROR, e);
  72. if (e instanceof ApiException) {
  73. return ResultUtil.error((ApiException) e, e.getMessage());
  74. } else {
  75. return ResultUtil.error(e.getMessage());
  76. }
  77. } finally {
  78. long end = System.currentTimeMillis();
  79. stringJoiner.add("============耗时============:").add((end - start) / 1000 + "").add("秒");
  80. log.info("request:{}", stringJoiner.toString());
  81. }
  82. }
  83. }