Commit 5220ad70 authored by 黎博's avatar 黎博

新增用户行为记录

parent f138274e
package cn.qg.holmes.aspect; package cn.qg.holmes.aspect;
import cn.qg.holmes.config.annotation.RecordOperation; import cn.qg.holmes.config.annotation.RecordOperation;
import cn.qg.holmes.entity.auth.UserInfoVo; import cn.qg.holmes.entity.behavior.UserBehaviorRecord;
import cn.qg.holmes.entity.k8s.ServiceCreateVo; import cn.qg.holmes.entity.k8s.ServiceCreateVo;
import cn.qg.holmes.exception.UnauthorizedException; import cn.qg.holmes.exception.UnauthorizedException;
import cn.qg.holmes.mapper.behavior.UserBehavoirRecordMapper; import cn.qg.holmes.mapper.behavior.UserBehaviorRecordMapper;
import cn.qg.holmes.service.auth.TokenService; import cn.qg.holmes.service.auth.TokenService;
import cn.qg.holmes.service.behavior.UserBehaviorRecordService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature; import org.aspectj.lang.Signature;
...@@ -13,11 +14,14 @@ import org.aspectj.lang.annotation.After; ...@@ -13,11 +14,14 @@ import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter; import java.lang.reflect.Parameter;
/** /**
...@@ -33,7 +37,7 @@ public class RecordOperationAspect { ...@@ -33,7 +37,7 @@ public class RecordOperationAspect {
TokenService tokenService; TokenService tokenService;
@Autowired @Autowired
UserBehavoirRecordMapper userBehavoirRecordMapper; UserBehaviorRecordService userBehaviorRecordService;
@After("@annotation(cn.qg.holmes.config.annotation.RequiresPermissions)") @After("@annotation(cn.qg.holmes.config.annotation.RequiresPermissions)")
public void after(JoinPoint joinPoint) { public void after(JoinPoint joinPoint) {
...@@ -49,22 +53,37 @@ public class RecordOperationAspect { ...@@ -49,22 +53,37 @@ public class RecordOperationAspect {
Signature signature = joinPoint.getSignature(); Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature; MethodSignature methodSignature = (MethodSignature) signature;
RecordOperation recordOperation = methodSignature.getMethod().getAnnotation(RecordOperation.class); RecordOperation recordOperation = methodSignature.getMethod().getAnnotation(RecordOperation.class);
// 行为记录需要保存的值
String action = recordOperation.value(); String action = recordOperation.value();
String namespace; String namespace = "";
String serviceName; String serviceName = "";
Parameter[] parameters = methodSignature.getMethod().getParameters(); // 获取方法里的参数
if (parameters.length > 0) { Object[] args = joinPoint.getArgs();
for (int i=0; i < parameters.length; i++) { ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
if (parameters[i].getName().equals("namespace")) { Method method = methodSignature.getMethod();
namespace = parameters[i].getName(); String[] parameterNames = pnd.getParameterNames(method);
if (parameterNames != null) {
for (int i=0; i < parameterNames.length; i++) {
if (parameterNames[i].equals("serviceName")) {
serviceName = args[i].toString();
} }
if (parameters[i].getName().equals("serviceName")) { if (parameterNames[i].equals("namespace")) {
serviceName = parameters[i].getName(); namespace = args[i].toString();
} }
if (parameters[i].getParameterizedType().getTypeName().contentEquals("ServiceCreateVo")) { if (parameterNames[i].equals("ServiceCreateVo")) {
ServiceCreateVo serviceCreateVo = (ServiceCreateVo) args[i];
serviceName = serviceCreateVo.getServiceName();
namespace = serviceCreateVo.getNamespace();
} }
} }
} }
// 保存用户行为记录
UserBehaviorRecord userBehaviorRecord = new UserBehaviorRecord();
userBehaviorRecord.setUsername(username);
userBehaviorRecord.setAction(action);
userBehaviorRecord.setNamespace(namespace);
userBehaviorRecord.setServiceName(serviceName);
userBehaviorRecordService.save(userBehaviorRecord);
} }
} }
package cn.qg.holmes.controller.k8s; package cn.qg.holmes.controller.k8s;
import cn.qg.holmes.common.JsonResult; import cn.qg.holmes.common.JsonResult;
import cn.qg.holmes.config.annotation.RecordOperation;
import cn.qg.holmes.entity.auth.UserInfoVo; import cn.qg.holmes.entity.auth.UserInfoVo;
import cn.qg.holmes.entity.k8s.DockerProject; import cn.qg.holmes.entity.k8s.DockerProject;
import cn.qg.holmes.entity.k8s.ServiceCreateVo; import cn.qg.holmes.entity.k8s.ServiceCreateVo;
...@@ -86,6 +87,7 @@ public class K8sController { ...@@ -86,6 +87,7 @@ public class K8sController {
* @param serviceCreateVo 创建实体类 * @param serviceCreateVo 创建实体类
* @return * @return
*/ */
@RecordOperation("create")
@PostMapping("/service/create") @PostMapping("/service/create")
public JsonResult createPod(@RequestBody ServiceCreateVo serviceCreateVo) { public JsonResult createPod(@RequestBody ServiceCreateVo serviceCreateVo) {
try { try {
......
package cn.qg.holmes.entity.behavior; package cn.qg.holmes.entity.behavior;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* 用户行为记录实体类 * 用户行为记录实体类
*/ */
@Data @Data
@TableName(value = "user_behavior_record") @TableName(value = "user_behavior_record")
public class UserBehaviorRecord { public class UserBehaviorRecord {
@TableId(type = IdType.AUTO)
private Integer id;
private String action;
private String serviceName;
private String namespace;
private String username;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date operateDate;
} }
...@@ -3,5 +3,5 @@ package cn.qg.holmes.mapper.behavior; ...@@ -3,5 +3,5 @@ package cn.qg.holmes.mapper.behavior;
import cn.qg.holmes.entity.behavior.UserBehaviorRecord; import cn.qg.holmes.entity.behavior.UserBehaviorRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserBehavoirRecordMapper extends BaseMapper<UserBehaviorRecord> { public interface UserBehaviorRecordMapper extends BaseMapper<UserBehaviorRecord> {
} }
package cn.qg.holmes.service.behavior;
import cn.qg.holmes.entity.behavior.UserBehaviorRecord;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserBehaviorRecordService extends IService<UserBehaviorRecord> {
}
package cn.qg.holmes.service.behavior.impl;
import cn.qg.holmes.entity.behavior.UserBehaviorRecord;
import cn.qg.holmes.mapper.behavior.UserBehaviorRecordMapper;
import cn.qg.holmes.service.behavior.UserBehaviorRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserBehaviorRecordServiceImpl extends ServiceImpl<UserBehaviorRecordMapper, UserBehaviorRecord> implements UserBehaviorRecordService {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment