diff --git a/newadmin/admin/pom.xml b/newadmin/admin/pom.xml index d1ee57f..433f27d 100644 --- a/newadmin/admin/pom.xml +++ b/newadmin/admin/pom.xml @@ -91,6 +91,11 @@ commons-logging 1.2 + + org.aspectj + aspectjweaver + 1.9.5 + diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/annotation/OpLog.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/annotation/OpLog.java new file mode 100644 index 0000000..64aeb17 --- /dev/null +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/annotation/OpLog.java @@ -0,0 +1,32 @@ +package com.chaozhanggui.admin.system.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author DJH + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface OpLog { + + /** + * 操作日志code + * @return 操作code + */ + String opCode() default ""; + + /** + * 操作日志-详情 + * @return 操作详情 + */ + String opDetail() default ""; + + /** + * 操作日志名称 + * @return 操作名称 + */ + String opName() default ""; +} diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/AgencyController.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/AgencyController.java index 39f1f77..60f0ff1 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/AgencyController.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/AgencyController.java @@ -1,6 +1,7 @@ package com.chaozhanggui.admin.system.controller; import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.admin.system.annotation.OpLog; import com.chaozhanggui.admin.system.model.CreateAgencyReq; import com.chaozhanggui.admin.system.service.AgencyService; import com.chaozhanggui.admin.system.util.MD5Util; @@ -42,6 +43,7 @@ public class AgencyController { * @param agencyReq 机构信息 * @return */ + @OpLog(opName = "创建机构", opDetail = "创建机构", opCode = "AGENCY_ADD") @RequestMapping("addAgency") public RespBody addAgency(@RequestHeader("loginName") String loginName, @RequestHeader("token") String token, @RequestHeader("userId") String userId, @RequestBody @Valid CreateAgencyReq agencyReq diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java index ad6a612..5f8d382 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java @@ -3,6 +3,7 @@ package com.chaozhanggui.admin.system.interceptor; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.admin.system.annotation.OpLog; import com.chaozhanggui.admin.system.util.RedisCst; import com.chaozhanggui.admin.system.util.RedisUtil; import com.chaozhanggui.common.system.config.RespBody; @@ -12,12 +13,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; +import java.lang.reflect.Method; public class LoginInterceptor implements HandlerInterceptor { @@ -35,7 +38,6 @@ public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取进过拦截器的路径 String requestURI = request.getRequestURI(); - String loginName=request.getHeader("loginName"); String token=request.getHeader("token"); String userId=request.getHeader("userId"); @@ -61,6 +63,7 @@ public class LoginInterceptor implements HandlerInterceptor { outputStream.write(JSONUtil.toJsonStr(new RespBody("999999")).getBytes("UTF-8")); return false; } + return true; } diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/OpLogAspect.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/OpLogAspect.java new file mode 100644 index 0000000..53c6926 --- /dev/null +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/OpLogAspect.java @@ -0,0 +1,106 @@ +package com.chaozhanggui.admin.system.interceptor; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.admin.system.annotation.OpLog; +import com.chaozhanggui.common.system.config.RespBody; +import com.chaozhanggui.common.system.util.IPUtil; +import com.chaozhanggui.dao.system.dao.TbPlussAdminRecodeMapper; +import com.chaozhanggui.dao.system.entity.TbPlussAdminRecodeWithBLOBs; +import com.chaozhanggui.dao.system.entity.TbPlussOperationRecord; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +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.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Date; + +@Slf4j +@Aspect +@Component +public class OpLogAspect { + + @Autowired + TbPlussAdminRecodeMapper tbPlussAdminRecodeMapper; + + @Pointcut("execution(* com.chaozhanggui.admin.system.controller..*.*(..)) && @annotation(com.chaozhanggui.admin.system.annotation.OpLog))") + public void executionService() { + } + + + @AfterReturning(returning="rvt", value = "executionService()") + public void after(JoinPoint point, Object rvt) { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + HttpServletRequest request; + if (attributes != null) { + request = ((ServletRequestAttributes) attributes).getRequest(); + } else { + log.warn("未获取到request"); + return; + } + + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + OpLog annotation = method.getAnnotation(OpLog.class); + + String loginName=request.getHeader("loginName"); + String token=request.getHeader("token"); + String userId=request.getHeader("userId"); + if(ObjectUtil.isEmpty(loginName)||ObjectUtil.isEmpty(token)||ObjectUtil.isEmpty(userId)){ + log.error("token 信息不存在"); + return; + } + + String body=processInputArg(point.getArgs()); + + TbPlussAdminRecodeWithBLOBs tbPlussAdminRecodeWithBLOBs=new TbPlussAdminRecodeWithBLOBs(); + + tbPlussAdminRecodeWithBLOBs.setUserId(Integer.valueOf(userId)); + tbPlussAdminRecodeWithBLOBs.setOperationCode(annotation.opCode()); + tbPlussAdminRecodeWithBLOBs.setRemark(annotation.opDetail()); + tbPlussAdminRecodeWithBLOBs.setIp(IPUtil.getIpAddress(request)); + tbPlussAdminRecodeWithBLOBs.setReqBody(body); + + if (rvt instanceof RespBody) { + try { + JSONObject jsonObject = (JSONObject) JSON.toJSON(rvt); + tbPlussAdminRecodeWithBLOBs.setResponseBody("返回结果:"+jsonObject.toString()); + } catch (Exception e) { + } + } + tbPlussAdminRecodeWithBLOBs.setCreateTime(new Date()); + tbPlussAdminRecodeMapper.insert(tbPlussAdminRecodeWithBLOBs); + } + + + private String processInputArg(Object[] args) { + StringBuffer sb=new StringBuffer(); + sb.append("请求参数:"); + if(ObjectUtil.isNotEmpty(args)||args.length>0){ + Arrays.stream(args).forEach(it->{ + if(it instanceof String||it instanceof Integer||it instanceof Long){ + sb.append(it); + sb.append("&"); + }else if(it instanceof Object){ + sb.append(JSONUtil.toJsonStr(it)); + sb.append("&"); + } + + }); + } + return sb.substring(0,sb.length()-1).toString(); + + } +} diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussOperationRecord.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussOperationRecord.java index c20588f..6968a17 100644 --- a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussOperationRecord.java +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussOperationRecord.java @@ -1,8 +1,13 @@ package com.chaozhanggui.dao.system.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + import java.io.Serializable; import java.util.Date; +@Data public class TbPlussOperationRecord implements Serializable { private Integer id; @@ -16,73 +21,34 @@ public class TbPlussOperationRecord implements Serializable { private Date createtime; - private String ip; private String extension; private static final long serialVersionUID = 1L; - public Integer getId() { - return id; - } - public void setId(Integer id) { - this.id = id; - } - public String getOperator() { - return operator; - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "ip") + private String ip; - public void setOperator(String operator) { - this.operator = operator == null ? null : operator.trim(); - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "extension ->> '$.isp'") + private String isp; - public String getDictvalue() { - return dictvalue; - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "extension ->> '$.city'") + private String city; - public void setDictvalue(String dictvalue) { - this.dictvalue = dictvalue == null ? null : dictvalue.trim(); - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "extension ->> '$.province'") + private String province; - public Integer getUserid() { - return userid; - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "extension ->> '$.country'") + private String country; - public void setUserid(Integer userid) { - this.userid = userid; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark == null ? null : remark.trim(); - } - - public Date getCreatetime() { - return createtime; - } - - public void setCreatetime(Date createtime) { - this.createtime = createtime; - } - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip == null ? null : ip.trim(); - } - - public String getExtension() { - return extension; - } - - public void setExtension(String extension) { - this.extension = extension == null ? null : extension.trim(); - } + @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER + , value = "extension ->> '$.county'") + private String county; } \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml b/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml index 121be9e..2ec1c00 100644 --- a/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml +++ b/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml @@ -20,8 +20,8 @@ - + @@ -53,7 +53,7 @@ -