实战项目——智慧社区(四)之 系统管理

news2024/11/19 13:29:41

1、用户管理

提供查询和搜索用户、根据id查询用户信息、添加用户、修改用户、删除用户的功能

界面

添加用户

修改用户信息

2、角色管理

提供查询和搜索角色、根据id查询角色信息、添加角色、修改角色、删除角色的功能

界面

添加角色

修改角色

3、菜单管理

提供查询和搜索菜单、根据id查询菜单信息、添加菜单、删除菜单的功能

界面

添加菜单

4、日志管理

日志(log)数据表设计

存储操作的日志信息

添加日志的注解类

旨在提供一种声明式的方式来表示某个方法可能需要特定的日志记录行为

package com.qcby.community.annotation;

import java.lang.annotation.*;

@Target(ElementType.METHOD)       //这个元注解表示LogAnnotation只能被用于方法上。
@Retention(RetentionPolicy.RUNTIME)    //这个元注解表示LogAnnotation的生命周期是运行时。也就是说,这个注解不仅会被保留在类文件中,还会在JVM加载类时保留,因此可以在运行时通过反射读取它。
@Documented    //这个元注解表示如果某个元素(类、方法、变量等)使用了LogAnnotation,那么在使用javadoc生成API文档时,这个注解也会被包含在生成的文档中。
public @interface LogAnnotation {
    String value() default "";
}

方法上添加日志注解

当方法上添加日志注解后,该方法在调用时就会生成相应的日志信息。当在人脸采集的方法上添加日志注解后,如果调用人脸采集这个方法,就会生成相应的人脸采集的日志信息,如:

    @LogAnnotation("人脸采集")
    @PostMapping("/addPerson")
    public Result addPerson(@RequestBody PersonFaceForm personFaceForm){
    ...

    }

Log切面类

自动记录带有@LogAnnotation注解的方法的日志信息。

package com.qcby.community.aspect;

import com.google.gson.Gson;
import com.qcby.community.annotation.LogAnnotation;
import com.qcby.community.entity.Log;
import com.qcby.community.entity.User;
import com.qcby.community.service.LogService;
import com.qcby.community.util.HttpContextUtil;
import com.qcby.community.util.IPUtil;
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 javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;

@Aspect
@Component
public class LogAspect {

    @Autowired
    private LogService logService;
    public static User user;

    @Pointcut("@annotation(com.qcby.community.annotation.LogAnnotation)")
    public void logPointCut() {

    }

    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        long beginTime = System.currentTimeMillis();
        //执行方法
        Object result = point.proceed();
        //执行时长(毫秒)
        long time = System.currentTimeMillis() - beginTime;
        //保存日志
        saveLog(point, (int) time);
        return result;
    }

    private void saveLog(ProceedingJoinPoint joinPoint, int time) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        Log log = new Log();
        LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class);
        if (logAnnotation != null) {
            //注解上的描述
            log.setOperation(logAnnotation.value());
        }

        //请求的方法名
        String className = joinPoint.getTarget().getClass().getName();
        String methodName = signature.getName();
        log.setMethod(className + "." + methodName + "()");

        //请求的参数
        Object[] args = joinPoint.getArgs();
        try {
            String params = new Gson().toJson(args[0]);
            log.setParams(params);
        } catch (Exception e) {

        }

        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
        log.setIp(IPUtil.getIpAddr(request));
        log.setTime(time);
        //登录用户信息
        if (user != null) {
            log.setUsername(user.getUsername());
            this.logService.save(log);
        }
    }

}

提供日志搜索查看和删除功能,界面如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript(七)-高级技巧篇

文章目录 深浅拷贝浅拷贝深拷贝 异常处理thorw抛异常try/catch捕获异常debugger 处理thisthis指向改变this 性能优化防抖lodash实现防抖手写防抖函数 节流 - throttle 深浅拷贝 浅拷贝 深拷贝 深拷贝有三种方式 通过递归实现深拷贝 一定先写数组再写对象 lodash/cloneDeep …

Gradle 在 Spring 中的使用-ApiHug准备-工具篇-006

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

Linux(Ubuntu) 查看并删除使用【dpkg】安装的软件

目录 ■前言 ■查看安装的软件 ■删除安装的软件 正常删除(dpkg -r xxxxName) 问题解决:use --purge to remove them too ■其他调查信息 命令 图片1 图片2 图片3 ■前言 安装Mysql8.3失败 我的服务器-CSDN博客 ■查看安装的软…

Linux的学习之路:10、进程(2)

摘要 本章主要是说一下fork的一些用法、进程状态、优先级和环境变量。 目录 摘要 一、fork 1、fork的基本用法 2、分流 二、进程状态 三、优先级 四、环境变量 1、常见环境变量 2、和环境变量相关的命令 3、通过代码如何获取环境变量 五、导图 一、fork 1、fork…

`Object3D.lookAt()` 是 Three.js 中 `Object3D` 类的一个方法,用于让一个对象朝向指定的目标点。

demo案例 方法签名 object.lookAt(target)参数 target:目标点的坐标,可以是一个 Three.js 的 Vector3 对象,也可以是包含 x、y、z 坐标的普通 JavaScript 对象。 返回值 该方法没有返回值。 功能 该方法将当前对象的 z 轴指向目标点&am…

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津,还是在火热地开发之中,从这里可以一目了然。 2. Contributors 显示对该仓库进行过…

【Golang学习笔记】从零开始搭建一个Web框架(四)

文章目录 模板渲染静态文件支持HTML 模板渲染 错误恢复完结撒花~~ 前情提示: 【Golang学习笔记】从零开始搭建一个Web框架(一)-CSDN博客 【Golang学习笔记】从零开始搭建一个Web框架(二)-CSDN博客 【Golang学习笔记】从…

【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:C❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、类的作用域 二、类的实例化 三、类对象模型 四、this指针 1、this指针的引出 2 this指针的特…

Linux学习笔记之9(消息队列)

Linux learning 1、引言2、创建一个消息队列3、发送和接受消息3.1、发送消息3.1、接收消息 4、删除一个消息队列5、例程 1、引言 消息队列(message queue)也是进程之间通信的一种方式,相比于共享内存的通信方式,消息队列也有类型…

如何更好地理解 Vue 3 watch 侦听器的用法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

电脑录屏软件哪个好用又免费?市面20款录屏软件测评结果

随着在线教学、远程办公和自媒体创作的兴起,电脑录屏软件逐渐成为了许多用户的必备工具。市面上的录屏软件琳琅满目,但真正既好用又免费的却并不多见。为了帮助大家找到心仪的录屏软件,我们对市面上20款热门免费录屏软件进行了详细的测评。 电…

【游戏开发之热更新技术】

游戏开发之热更新技术 热更新技术是指在不重新发布和安装应用的情况下,对已部署的应用程序进行更新和修补的技术。这种技术在现代软件开发中变得越来越重要,因为它能够为用户提供更加及时的服务和更好的体验。以下是一篇关于热更新技术的文章&#xff0…

浦大喜奔APP8.0智能升级,发力数字金融深化五大金融篇章服务

1. 浦大喜奔立足科技赋能持续迭代升级,筑牢用户体验护城河 浦发信用卡中心坚持数字科技与客户体验双轮驱动,以科技赋能发展,优化整体系统性能,全方位支撑浦大喜奔 APP提高线上客户服务能力与体验,积极服务民生消费&a…

C++的引用和内联函数,auto

什么是引用 引用就是取别名 可以给一个变量取多个别名,也可以给别名取别名 别名与本名拥有同一地址,对任意别名修改,也会同时修改其他别名和本名 引用的作用 引用的作用与指针重叠度很高 图中函数的参数int& a,int& b,a是x的别名,b是y的别名 则ab的交换就是xy的交…

Python 编程 深入了解内存管理机制、深拷贝与浅拷贝

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、对象和引用、内存管理机制 Python 中的一切都是对象,包括数字、字符串、列表和函数等。为了简化内存管理并提高效率,Python 采用了统一的对象模型。在这个模型中&#xff0c…

【bugku】变量1

1.打开靶场,进入主机 2.根据源码发出get请求,GLOBALS这种全局变量用于在 PHP 脚本中的任意位置访问全局变量 3.得到flag值

第二届数据安全大赛暨首届“数信杯”数据安全大赛数据安全积分争夺赛-东区预赛wp

附件下载地址: 链接:https://pan.baidu.com/s/1tClZrup28n4fUe5Kpa7mgQ?pwdkbd6 文章目录 数据安全题re_ds001Homooo0 数据分析题数据分析1-1数据分析1-2数据分析1-3数据分析2-1数据分析2-2数据分析2-3数据分析3-1数据分析3-2数据分析3-3数据分析5-1数据…

c++调python接口

1. 新建run.py文件,并定义相关接口: import numpy as np from scipy.fftpack import fftdef str_add(str1,str2):return int(str1) int(str2)def my_sort(data):data.sort()return datadef aw_fft(data, Fs):N len(data)result np.abs(fft(xdata, n…

在开发过程中使用 git rebase 还是 git merge

在开发过程中使用 git rebase 还是 git merge Merge(合并)的优点和缺点Rebase(变基)的优点和缺点总结: Git merge 和rebase的目的是一样的,它们都是将多个分支合并成一个。 虽然他们最终的目标是一样的,但这两种方法实现的方式是不同的。那么…

本地化部署离线开源免费语音识别API,支持多模态AI能力引擎

思通数科作为一家专注于多模态AI能力开源引擎平台,其技术产品涵盖了自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别以及语音识别等多个领域。在语音识别这一细分市场,思通数科的技术产品中的音频文件转写服务有着相似的应用场景和功能特点。…