IDEA+spring boot+activiti+shiro+layui+Mysql权限管理系统源码

news2025/2/5 8:56:51

IDEA+spring boot+activiti+shiro+layui+Mysql权限管理系统

  • 一、系统介绍
    • 1.环境配置
  • 二、系统展示
    • 1. 管理员登录
    • 2.主页
    • 3.用户管理
    • 4.部门管理
    • 5. 菜单管理
    • 6. 角色管理
    • 7. 字典管理
    • 8.定时任务
    • 9.操作日志
    • 10.生成管理
  • 三、部分代码
    • UserMapper.java
    • UserController.java
    • User.java
  • 四、其他
    • 获取源码


一、系统介绍

本系统实现了权限管理系统,管理端实现了管理员登录、 主页、用户管理、部门管理、菜单管理、角色管理、字典管理、定时任务、操作日志、生成管理

1.环境配置

JDK版本:1.8
Mysql:5.7

二、系统展示

1. 管理员登录

在这里插入图片描述

登录用户名密码:admin 123456

2.主页

在这里插入图片描述

3.用户管理

在这里插入图片描述

4.部门管理

在这里插入图片描述

5. 菜单管理

在这里插入图片描述

6. 角色管理

在这里插入图片描述

7. 字典管理

在这里插入图片描述

8.定时任务

在这里插入图片描述

9.操作日志

在这里插入图片描述

10.生成管理

在这里插入图片描述

三、部分代码

UserMapper.java

package com.kalvin.kvf.modules.sys.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kalvin.kvf.modules.sys.entity.User;
import com.kalvin.kvf.modules.sys.vo.UserQueryVO;

import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 */
public interface UserMapper extends BaseMapper<User> {

    /**
     * 查询用户列表
     * @param queryVO 查询参数
     * @return
     */
    List<User> selectUserList(UserQueryVO queryVO, Page page);

}


UserController.java

package com.kalvin.kvf.modules.sys.controller;


import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kalvin.kvf.common.controller.BaseController;
import com.kalvin.kvf.common.dto.R;
import com.kalvin.kvf.common.utils.CryptionKit;
import com.kalvin.kvf.common.utils.ShiroKit;
import com.kalvin.kvf.modules.sys.dto.UserEditDTO;
import com.kalvin.kvf.modules.sys.dto.UserRoleGroupDTO;
import com.kalvin.kvf.modules.sys.entity.Dept;
import com.kalvin.kvf.modules.sys.entity.User;
import com.kalvin.kvf.modules.sys.service.IDeptService;
import com.kalvin.kvf.modules.sys.service.IUserRoleService;
import com.kalvin.kvf.modules.sys.service.IUserService;
import com.kalvin.kvf.modules.sys.vo.UserQueryVO;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 */
@RestController
@RequestMapping("sys/user")
public class UserController extends BaseController {

    @Autowired
    private IUserService userService;

    @Autowired
    private IDeptService deptService;

    @Autowired
    private IUserRoleService userRoleService;

    @RequiresPermissions("sys:user:index")
    @GetMapping("index")
    public ModelAndView index() {
        return new ModelAndView("sys/user");
    }

    @GetMapping(value = "edit")
    public ModelAndView edit(Long id) {
        ModelAndView mv = new ModelAndView("sys/user_edit");
        UserEditDTO userEditDTO = new UserEditDTO();
        UserRoleGroupDTO userRoleGroupDTO = new UserRoleGroupDTO();
        if (id != null) {
            User user = userService.getById(id);
            Dept dept = deptService.getById(user.getDeptId());
            userRoleGroupDTO = userRoleService.getUserRoleGroupDTOByUserId(id);
            BeanUtil.copyProperties(user, userEditDTO);
            userEditDTO.setDeptName(dept == null ? "" : dept.getName());
        }
        userEditDTO.setUserRole(userRoleGroupDTO);
        mv.addObject("editInfo", userEditDTO);
        return mv;
    }

    @GetMapping(value = "info")
    public ModelAndView info() {
        ModelAndView mv = new ModelAndView("sys/user_info");
        User user = userService.getById(ShiroKit.getUserId());
        mv.addObject("user", user);
        return mv;
    }

    @GetMapping(value = "password")
    public ModelAndView password() {
        return new ModelAndView("sys/user_pwd");
    }

    @GetMapping(value = "list/data")
    public R listData(UserQueryVO queryVO) {
        Page<User> page = userService.listUserPage(queryVO);
        return R.ok(page);
    }

    @RequiresPermissions("sys:user:add")
    @Transactional
    @PostMapping(value = "add")
    public R add(User user, @RequestParam("roleIds") List<Long> roleIds) {
        user.setDeptId(user.getDeptId() == null ? 0 : user.getDeptId());
        // 生成用户初始密码并加密
        user.setPassword(CryptionKit.genUserPwd());
        userService.saveOrUpdate(user);
        userRoleService.saveOrUpdateBatchUserRole(roleIds, user.getId());
        return R.ok();
    }

    @RequiresPermissions("sys:user:edit")
    @Transactional
    @PostMapping(value = "edit")
    public R edit(User user, @RequestParam("roleIds") List<Long> roleIds) {
        user.setDeptId(user.getDeptId() == null ? 0 : user.getDeptId());
        userService.updateById(user);
        userRoleService.saveOrUpdateBatchUserRole(roleIds, user.getId());
        return R.ok();
    }

    @PostMapping(value = "updateInfo")
    public R updateInfo(User user) {
        userService.updateById(user);
        return R.ok();
    }

    @RequiresPermissions("sys:user:del")
    @PostMapping(value = "remove/{id}")
    public R remove(@PathVariable Long id) {
        userService.removeById(id);
        return R.ok();
    }

    @RequiresPermissions("sys:user:del")
    @PostMapping(value = "removeBatch")
    public R removeBatch(@RequestParam("ids") List<Long> ids) {
        userService.removeByIds(ids);
        return R.ok();
    }

    /**
     * 管理员重置某个用户密码
     * @param id 用户ID
     * @return
     */
    @RequiresPermissions("sys:user:reset")
    @PostMapping(value = "{id}/resetPwd")
    public R resetPwd(@PathVariable Long id) {
        userService.updateUserPassword(id, CryptionKit.genUserPwd());
        return R.ok();
    }

    /**
     * 用户修改密码
     * @param oldPassword 旧密码
     * @param password  新密码
     * @return
     */
    @PostMapping(value = "changePwd")
    public R changePwd(String oldPassword, String password) {
        if (StrUtil.isBlank(oldPassword) && StrUtil.isBlank(password)) {
            return R.fail("修改失败,非法的参数");
        }
        // 用户修改密码
        User user = userService.getById(ShiroKit.getUserId());
        oldPassword = CryptionKit.genUserPwd(oldPassword);
        if (user.getPassword().equals(oldPassword)) {
            password = CryptionKit.genUserPwd(password);
            if (user.getPassword().equals(password)) {
                return R.fail("新密码不能与旧密码相同");
            }
        } else {
            return R.fail("旧密码不正确");
        }
        userService.updateUserPassword(ShiroKit.getUserId(), password);
        return R.ok();
    }

}


User.java

package com.kalvin.kvf.modules.sys.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.kalvin.kvf.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;

/**
 * <p>
 * 用户表
 * </p>
 *
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_user")
public class User extends BaseEntity {

    private static final long serialVersionUID=1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 归属部门
     */
    private Long deptId;

    /**
     * 登录名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 姓名
     */
    private String realname;

    /**
     * 性别。0:未知;1:男;2:女
     */
    private Integer sex;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 固定电话
     */
    private String tel;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 职务名称
     */
    private String jobTitle;

    /**
     * 用户状态。0:正常;1:禁用
     */
    private Integer status;

    /**
     * 排序。值越小越靠前
     */
    private Integer sort;

    /**
     * 删除标识。0:未删除;1:已删除
     */
    private Integer delFlag;

    /**
     * 创建人
     */
    private Long createBy;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建时间
     */
    private Date createTime;


}



四、其他

获取源码

点击以下链接获取源码。
IDEA+spring boot+activiti+shiro++layui+Mysql权限管理系统源码
IDEA+SpringBoot + Mybatis + Shiro+Bootstrap+Mysql智慧仓库WMS源码
IDEA+springboot+ssm+layui+mysql高校宿舍管理系统源码
IDEA+springboot + ssm +shiro+ easyui +mysql实现的进销存系统
IDEA+springboot+mybatis+shiro+bootstrap+Mysql网上书店管理系统
IDEA+springboot+mybatis+shiro+bootstrap+Mysql WMS仓库管理系统
IDEA+spring+spring mvc+mybatis+bootstrap+jquery+Mysql运动会管理系统源码
IDEA+SpringBoot+mybatis+bootstrap+jquery+Mysql车险理赔管理系统源码
IDEA+Spring Boot + MyBatis + Layui+Mysql垃圾回收管理系统源码
IDEA+SpringBoot+mybatis+SSM+layui+Mysql学生就业信息管理系统源码
IDEA+springboot+jpa+Layui+Mysql销售考评系统源码
IDEA+Spring + Spring MVC + MyBatis+Bootstrap+Mysql酒店管理系统源码
IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停车位管理系统源码

Java+Swing+Mysql实现学生宿舍管理系统

Java+Swing+Txt实现自助款机系统

Java+Swing+Mysql自助存取款机系统

Java+Swing+mysql5实现学生成绩管理系统(带分页)

Java+Swing+Mysql实现超市商品管理系统源码

Java+Swing+Mysql实现通讯录管理系统源码

Java+Swing+Mysql实现图书管理系统源码

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

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

相关文章

Python Flask构建微信小程序订餐系统 (七)

🔥 账号管理显示状态 🔥 账号管理选择状态后并显示 修改前 修改后 运行效果 🔥 账号管理执行账号的删除 🔥 修改前 修改后 这里使用的图标库 font awesome</

引入Vue的方式

1.cdn引入 <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

竞赛管理系统实现自动化测试

目录 一、为竞赛管理系统设计测试用例 二、根据测试用例进行测试 登录页面测试 功能测试 界面测试 用户注册页面 功能测试 界面测试 竞赛信息列表页面测试 界面测试 添加竞赛信息页面测试 功能测试 界面测试 修改竞赛信息页面测试 功能测试 一、为竞赛管理…

Rollup 的作用、使用教程、支持 Vue、以及与 Webpack / Babel 的区别

一、前置知识 没接触过前端模块化概念的同学可先参考&#xff1a;JS & Node 模块化解释&#xff1a;AMD、UMD、CommonJS、 ESM 二、什么是 Rollup &#xff1f; Rollup 工具可以将代码转成不同模块&#xff0c;实现一套代码多端&#xff08;浏览器/Node&#xff09;引入…

SpringBoot的静态资源文件访问问题

一、采用默认的文件存放位置&#xff1a; Spring Boot 对静态资源映射提供了默认配置&#xff0c; 默认将 /** 所有访问映射到以下目录&#xff1a; classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources在如上路径的文件可以被直接访问…

Havoc!新的开源命令和控制C2框架

工具介绍 Havoc是一款现代化可扩展的后渗透命令控制框架&#xff0c;可作为Cobalt Strike和Brute Ratel等付费选项的替代方案。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230618】获取下载链接 Havoc包含各种各样的模块&#xff0c;允许渗透测试人员&#xff08;和黑…

Rust 数据类型 之 结构体(Struct)

目录 结构体&#xff08;Struct&#xff09; 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体&#xff08;Unit Struct&#xff09; 元组结构体&#xff08;Tuple Struct&#xff09; 具名结构体&#xff08;Named Struct&#xff09; 结构体嵌套 结构体方法…

华为云ROMA Connect 的智能集成 – 现代企业数字化转型的新利器

在当今数字信息智能化的时代&#xff0c;人工智能技术逐渐深入企业的生产流程和实践中。人工智能的应用成为现代企业数字化转型的新利器。华为云的ROMA Connect作为企业级的融合集成服务 EiPaaS平台&#xff0c;从今年开始也进入了人工智能技术&#xff0c;针对几个主要的企业集…

新一代iPaaS全域融合集成平台ROMA Connect HDC.Cloud 2023内容值得再读!

华为云下一代ROMA Connect HDC.Cloud 2023 精彩内容摘要&#xff1a; 7月9号 分论坛上嘉宾分享一站式融合集成平台解决的用户痛点、应用场景、新一代全域升级的新特性、以及伙伴分享案例干活 ROMA Connect 展台提供开发者体验全新升级版ROMA Connect的 AI智能集成 HDC.Cloud…

华为OD机试真题 Java 实现【战场索敌】【2023 B卷 100分】,深度优先搜索dfs算法,这眼花缭乱的,你这是“战场索鬼”吧?

目录 专栏导读一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果增加目标敌人数量K为55、来&#xff0c;上强度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于…

从零开始 Spring Cloud 4:Nacos

从零开始 Spring Cloud 4&#xff1a;Nacos 图源&#xff1a;laiketui.com Nacos 是 Alibaba 研发的用于 Spring Cloud Alibaba 的服务注册中心组件&#xff0c;符合 Spring Cloud 官方标准&#xff0c;同样被 Spring Cloud 官方接纳&#xff0c;所以我们可以在 Spring Cloud …

FPGA XDMA 中断模式实现 PCIE3.0 测速试验 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xf…

同步和异步的区别

同步&#xff0c;可以理解为在执行完一个函数或方法之后&#xff0c;一直等待系统返回值或消息&#xff0c;这时程序是处于阻塞的&#xff0c;只有接收到返回的值或消息后才往下执行其他的命令&#xff1b; 异步&#xff0c;执行完函数或方法后&#xff0c;不必阻塞性地等待返回…

缓存服务使用总结

1、介绍 分布式缓存方案缓存服务搭建 2、分布式缓存方案&#xff08;重点掌握&#xff09; 2.1、什么是缓存 通常将数据从数据库中同步一份到内存中&#xff0c;客户端直接从内存中查询数据&#xff0c;减少了和数据库的交互次数&#xff0c;提高查询性能&#xff08;因为内…

什么是 WebSocket?Java 中如何实现 WebSocket?

什么是 WebSocket&#xff1f;Java 中如何实现 WebSocket&#xff1f; WebSocket 简介 WebSocket 是一种新型的网络协议&#xff0c;它允许客户端和服务器之间进行双向通信&#xff0c;可以实现实时数据交互。WebSocket 协议是基于 HTTP 协议的&#xff0c;使用标准的 TCP 连…

java项目之(超市管理系统ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的超市管理系统。技术交流和部署相关看文章末尾&#xff01; 目录 开发环境&#xff1a; 后端&#xff1a; 前端&#xff1a; 数据库&…

【MySQL系列】深入学习数据类型

「前言」文章内容大致是数据库的数据类型。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、数据类型分类二、数值类型2.1 tinyint类型2.2 bit类型2.3 小数类型2.3.1 float类型2.3.2 decimal类型 2.4 字符串类型2.4.1 char类型2.4.2 varchar类型2.4.3 …

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

能源是国民经济发展和人民生活必须的重要物质基础。在过去的200多年里&#xff0c;建立在煤炭、石油、天然气等化石燃料基础上的能源体系极大的推动了人类社会的发展。但是人类在使用化石燃料的同时&#xff0c;也带来了严重的环境污染和生态系统破坏。近年来&#xff0c;世界各…

如何快速又高质量的输出PDF实验报告?

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 PDF文档的打印在很多应用场景中都会被使用到&#xff0c;最为常见的就是实验室信息管理…

rockchip linux Vendor storage 及SN添加

前言 在产品开发过程中,最后都会为产品编辑一个产品编号方便于管理和维护,而SN(Series Number)就是用于产品的生产编号。但是在linux中,并没有专门管理串码的驱动。 Vendor storage 是rockchip 被设计用来存储 SN,MAC,LAN,BT 等 vendor data。特征如下: 唯一的访问…