New file |
| | |
| | | package com.zy.common.config; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.annotations.ManagerAuth; |
| | | import com.core.common.BaseRes; |
| | | import com.core.common.Cools; |
| | | import com.zy.common.utils.Http; |
| | | import com.zy.system.entity.OperateLog; |
| | | import com.zy.system.entity.User; |
| | | import com.zy.system.entity.UserLogin; |
| | | import com.zy.system.service.UserLoginService; |
| | | import com.zy.system.service.UserService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.aspectj.lang.ProceedingJoinPoint; |
| | | import org.aspectj.lang.annotation.Around; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Component |
| | | @Aspect |
| | | @Slf4j |
| | | public class AspectConfig { |
| | | |
| | | @Autowired |
| | | private UserLoginService userLoginService; |
| | | @Autowired |
| | | private UserService userService; |
| | | |
| | | @Pointcut("execution(* com.zy.asrs.controller..*.*(..))") |
| | | private void webLog() { |
| | | } |
| | | |
| | | @Around("@within(org.springframework.web.bind.annotation.RestController)" + |
| | | "||@within(org.springframework.stereotype.Controller)") |
| | | public Object after(ProceedingJoinPoint joinPoint) throws Throwable{ |
| | | ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
| | | HttpServletRequest request = requestAttributes.getRequest(); |
| | | long start = System.currentTimeMillis(); |
| | | Object result = joinPoint.proceed(joinPoint.getArgs()); |
| | | |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | if (method.isAnnotationPresent(ManagerAuth.class)){ |
| | | ManagerAuth annotation = method.getAnnotation(ManagerAuth.class); |
| | | if (annotation.value().equals(ManagerAuth.Auth.CHECK)){ |
| | | if (!Cools.isEmpty(annotation.memo())) { |
| | | saveLog(joinPoint, request, result); |
| | | } |
| | | } |
| | | } |
| | | |
| | | long end = System.currentTimeMillis(); |
| | | |
| | | // log.info("请求日志的打印"); |
| | | // log.info("请求地址:{}", Optional.ofNullable(request.getRequestURI().toString()).orElse(null)); |
| | | // log.info("请求方式:{}",request.getMethod()); |
| | | // log.info("请求类方法:{}",joinPoint.getSignature()); |
| | | // log.info("请求类方法参数:{}", JSONObject.toJSONString(filterArgs(joinPoint.getArgs()))); |
| | | // log.info("请求响应参数{}", JSONObject.toJSONString(result)); |
| | | // log.info("执行耗时:{}", end - start); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | private List<Object> filterArgs(Object[] objects) { |
| | | return Arrays.stream(objects).filter(obj -> !(obj instanceof MultipartFile) |
| | | && !(obj instanceof HttpServletResponse) |
| | | && !(obj instanceof HttpServletRequest)).collect(Collectors.toList()); |
| | | } |
| | | |
| | | private void saveLog(ProceedingJoinPoint joinPoint, HttpServletRequest request, Object result) { |
| | | Long userId = 9527L; |
| | | String token = request.getHeader("token"); |
| | | UserLogin userLogin = userLoginService.selectOne(new EntityWrapper<UserLogin>().eq("token", token).eq("system", "WMS")); |
| | | if (userLogin != null) { |
| | | User user = userService.selectById(userLogin.getUserId()); |
| | | if (user != null) { |
| | | userId = user.getId(); |
| | | } |
| | | } |
| | | |
| | | // 记录操作日志 |
| | | OperateLog operateLog = new OperateLog(); |
| | | operateLog.setAction(request.getRequestURI()); |
| | | operateLog.setIp(request.getRemoteAddr()); |
| | | operateLog.setUserId(userId); |
| | | operateLog.setRequest(JSONObject.toJSONString(filterArgs(joinPoint.getArgs()))); |
| | | operateLog.setResponse(JSONObject.toJSONString(result)); |
| | | request.setAttribute("operateLog", operateLog); |
| | | } |
| | | |
| | | } |