1.说明

基于注解和AOP实现的日志管理。只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取。

2.功能展示

包括日志搜索、查看详情和批量删除。

3.业务模型

@Data
@TableName("sys_oper_log")
public class SysOperLog extends Model<SysOperLog> { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO)
private Integer id; /**
* 操作模块
*/
private String operModule; /**
* 操作方法
*/
private String operMethod; /**
* 操作类型
*/
private String operType; /**
* 操作描述
*/
private String operDesc; /**
* 请求方法
*/
private String reqMethod; /**
* 请求参数
*/
private String operParam; /**
* 请求参数
*/
private String operIp; /**
* 请求uri
*/
private String operUri; /**
* 操作人
*/
private String operUser; /**
* 操作时间
*/
private String createTime; @Override
protected Serializable pkVal() {
return this.id;
}
}

4.控制器

@Controller
@RequestMapping("/operlog")
public class OperLogController {
@Autowired
private SysOperLogService logService; @GetMapping("listUI")
public String listUI(){
return "operlog/list";
} /**
* 分页查询
* @param operDesc
* @param pageNo
* @param pageSize
* @return
*/
@PostMapping("/list")
@ResponseBody
public Result<IPage<SysOperLog>> list(@RequestParam(value = "operDesc", required = false) String operDesc,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize){
// 构造查询条件
QueryWrapper<SysOperLog> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(operDesc)){
queryWrapper.like("oper_desc",operDesc);
}
Page<SysOperLog> page = new Page<>(pageNo,pageSize); IPage<SysOperLog> result = logService.page(page, queryWrapper);
// 设置总记录数
result.setTotal(logService.count(queryWrapper)); return ResultUtil.ok(result);
} @PostMapping("/remove")
@ResponseBody
public Result<String> remove(@RequestParam Integer id){
logService.removeById(id); return ResultUtil.ok("删除成功!");
} @PostMapping("/removes")
@ResponseBody
public Result<String> removes(@RequestBody Integer[] ids){
logService.removeByIds(Arrays.asList(ids)); return ResultUtil.ok("删除成功!");
}
}

5.前端页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>日志列表</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" th:href="@{/static/plugin/layui/css/layui.css}" media="all">
<link rel="stylesheet" th:href="@{/static/css/app.css}" media="all">
</head>
<body>
<div class="searchTable">
操作描述:
<div class="layui-inline">
<input class="layui-input" name="s_operDesc" id="s_operDesc" autocomplete="off">
</div>
<button id="searchBtn" class="layui-btn" data-type="reload">搜索</button>
</div>
<table class="layui-hide" id="tb_operlog" lay-filter="tb_operlog"></table> <input type="text" id="ctx" hidden="hidden" th:value="${#request.getContextPath()}"> <!--详情页-->
<div class="layui-row" id="viewForm" style="display:none;">
<div class="layui-col-md10">
<form class="layui-form layui-from-pane" action="" style="margin-top:20px">
<input type="text" id="id" name="id" hidden="hidden">
<div class="layui-form-item">
<label class="layui-form-label">操作模块</label>
<div class="layui-input-block">
<input type="text" id="operModule" name="operModule" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作方法</label>
<div class="layui-input-block">
<textarea type="text" id="operMethod" name="operMethod" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-textarea code-view" disabled></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作描述</label>
<div class="layui-input-block">
<input type="text" id="operDesc" name="operDesc" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作类型</label>
<div class="layui-input-block">
<input type="text" id="operType" name="operType" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">请求方式</label>
<div class="layui-input-block">
<input type="text" id="reqMethod" name="reqMethod" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">请求参数</label>
<div class="layui-input-block">
<textarea type="text" id="operParam" name="operParam" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-textarea code-view" disabled></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">请求IP</label>
<div class="layui-input-block">
<input type="text" id="operIp" name="operIp" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">请求URI</label>
<div class="layui-input-block">
<input type="text" id="operUri" name="operUri" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作人</label>
<div class="layui-input-block">
<input type="text" id="operUser" name="operUser" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">操作时间</label>
<div class="layui-input-block">
<input type="text" id="createTime" name="createTime" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input" disabled>
</div>
</div>
<!--<div class="layui-form-item" style="margin-top:40px">
<div class="layui-input-block">
<button type="button" class="layui-btn layui-btn-primary" id="back">关闭</button>
</div>
</div>-->
</form>
</div>
</div>

6 获取源码

捐赠任意金额,评论区留下邮箱发送 :)

SpringBoot+Shiro+LayUI权限管理系统项目-8.实现日志管理的更多相关文章

  1. SpringBoot框架的权限管理系统

    springBoot框架的权限管理系统,支持操作权限和数据权限,后端采用springBoot,MyBatis,Shiro,前端使用adminLTE,Vue.js,bootstrap-table.tre ...

  2. SpringBoot&Shiro实现权限管理

    SpringBoot&Shiro实现权限管理 引言 相信大家前来看这篇文章的时候,是有SpringBoot和Shiro基础的,所以本文只介绍整合的步骤,如果哪里写的不好,恳请大家能指出错误,谢 ...

  3. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  4. SpringSecurity权限管理系统实战—二、日志、接口文档等实现

    系列目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战 ...

  5. SpringBoot+Shiro学习(七):Filter过滤器管理

    SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注  0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...

  6. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  7. niaobulashi-一个基于springboot shrio的权限管理系统

    github项目地址:https://github.com/niaobulashi/niaobulashi springboot学习地址:http://www.ityouknow.com/spring ...

  8. .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目

    系列目录     [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...

  9. 如何在通用权限管理系统中集成log4net日志功能

    开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个 ...

  10. 基于easyUI实现权限管理系统(三)——角色管理

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. role.jsp:角色管理界面 <!DOCTYPE html PUBLIC "-//W3 ...

随机推荐

  1. JMS微服务开发示例(八)双机热备

    双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上. 要实现这个,只需要设置 SingletonService = true. var mi ...

  2. Go-用本地时间解析时间字符串

    Go-用本地时间解析时间字符串 1. 指定本地时区 const ( gLocalTimeZone = "Asia/Shanghai" ) 2. 加载本地时区 var ( gLoca ...

  3. [转帖]jmeter 使用beanshell 编写脚本

    目录 一.介绍 1.1 介绍 1.2 下载&启动 二.jmeter中创建beanshell脚本 三.jmeter与beanshell 数据交互 3.1 例子1 beanshell 将变量传给j ...

  4. [转帖]shell脚本之awk命令——按列求平均值、最大值、最小值

    文章目录 写在前面 awk求平均值 awk求最大值 awk求最小值 awk求极值.均值的实际应用 写在前面 awk命令求极值和均值需要熟悉该命令的基本用法,如果你不熟悉该命令,请先阅读shell脚本之 ...

  5. [转帖]【JVM】类加载机制

    什么是类的加载 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产 ...

  6. [转帖]LTP使用和分析

    一.安装及编译流程 1.下载LTP LTP 项目目前位于 GitHub,项目地址:https://github.com/linux-test-project/ltp . 获取最新版可以执行以下命令: ...

  7. 在线获取所有依赖rpm包的方法

    背景 现在经常有一些不能上网的LInux机器但是需要安装一些软件. 但是有时候经常因为有依赖关系找不到的情况比较麻烦. 或者是一些公司的网络总是受限,网络速度非常慢. 下载安装非常折磨人. 这个时候就 ...

  8. Mysql 查看varchar和char类型表的列长度

    SELECT table_name, SUM(character_maximum_length) AS sum_length FROM information_schema.columns WHERE ...

  9. Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)

    阿里的FunAsr对Whisper中文领域的转写能力造成了一定的挑战,但实际上,Whisper的使用者完全可以针对中文的语音做一些优化的措施,换句话说,Whisper的"默认"形态 ...

  10. 【AIGC】只要10秒,AI生成IP海报,解放双手!!!

    看完这篇文章,你将学会以下价值连城的内容 1.云端部署(配置不行的小伙伴看)+ 云端模型放置位置 2.本地部署(配置达标的小伙伴看) 3.运用SD训练IP的流程和技巧(LoRA篇) 4.运用SD稳定生 ...