返回
Spring Boot + vue-element博客系统 - 完善项目日志功能
后端
2023-12-28 18:08:55
Spring Boot + vue-element 个人博客项目实战教程(十八、操作日志功能实现)
一、前言
上一节课我们完成了博客的增删改查功能,今天我们来将操作日志和登录日志实现一下,这样我们项目基本就完成了,前端的页面做一下,我们的项目就搞定啦。注意:项目标题已经改了。
二、操作日志表创建
CREATE TABLE operation_log (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
method VARCHAR(20) DEFAULT NULL COMMENT '请求方式',
path VARCHAR(255) DEFAULT NULL COMMENT '请求路径',
ip VARCHAR(15) DEFAULT NULL COMMENT 'ip地址',
operation VARCHAR(255) DEFAULT NULL COMMENT '操作',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、操作日志插入
@PostMapping("/operationLog")
public Result operationLog(@RequestBody OperationLog operationLog) {
operationLogService.save(operationLog);
return Result.success();
}
四、记录操作日志
@AfterReturning(returning = "returnValue", pointcut = "execution(* com.mc.blog.controller..*.*(..))")
public void saveLog(JoinPoint joinPoint, Object returnValue) {
try {
// 判断当前用户
SysUser sysUser = (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// 获取请求参数
Object[] args = joinPoint.getArgs();
// 获取方法名
String methodName = joinPoint.getSignature().getName();
// 获取包名+方法名
String targetName = joinPoint.getSignature().getDeclaringTypeName() + "." + methodName;
// 获取入参对象
Object[] requestObjects = getRequestObjects(args);
// 创建操作日志对象
OperationLog operationLog = new OperationLog();
operationLog.setMethod(request.getMethod());
operationLog.setPath(request.getRequestURI());
operationLog.setIp(request.getRemoteAddr());
// 用户名
operationLog.setUsername(sysUser.getUsername());
// 类名+方法名
operationLog.setOperation(targetName);
// 入参
operationLog.setParameter(gson.toJson(requestObjects));
// 返回值
operationLog.setResult(gson.toJson(returnValue));
// 保存操作日志
operationLogService.save(operationLog);
} catch (Exception e) {
logger.error("保存操作日志失败", e);
}
}
五、登录日志记录
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Result login(HttpServletRequest request, HttpServletResponse response, @RequestBody SysUser user) {
// 获取用户登录信息
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
Authentication authentication = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 获取用户角色信息
List<SysRole> roles = sysRoleService.selectRoleByUser(user.getUsername());
SysUser sysUser = sysUserService.selectUserByUserName(user.getUsername());
sysUser.setRoles(roles);
// 获取令牌
String jwtToken = jwtTokenUtil.generateToken(sysUser);
// 将令牌存入cookie
Cookie cookie = new Cookie("token", jwtToken);
cookie.setMaxAge(7 * 24 * 60 * 60);
cookie.setPath("/");
response.addCookie(cookie);
// 记录登录日志
OperationLog operationLog = new OperationLog();
operationLog.setMethod("POST");
operationLog.setPath("/login");
operationLog.setIp(request.getRemoteAddr());
operationLog.setUsername(sysUser.getUsername());
operationLog.setOperation("用户登录");
operationLog.setParameter(gson.toJson(user));
operationLogService.save(operationLog);
// 返回登录信息
return Result.success(sysUser);
}
六、测试
运行项目,然后登录,然后执行一些操作,然后查看数据库中的日志表,就可以看到日志了。
至此,操作日志和登录日志就完成了,明天我们写个前端页面,然后我们的项目就搞定啦。
七、总结
本指南详细介绍了如何在 Spring Boot + vue-element 个人博客项目中实现操作日志和登录日志的功能,提升了项目的安全性与可靠性。通过采用适当的数据库结构和代码逻辑,我们可以轻松记录和保存用户操作信息,为系统审计和故障排除提供 valuable的证据。同时,文中还提供了有味、有用的细节和实例代码,助力开发者轻松完成项目构建。