IDEA + Spring Boot + Security + MyBatis Plus+Mysql低代码快速开发平台
- 一、系统介绍
- 1.环境配置
- 二、系统展示
- 1. 管理员登录
- 2.主页
- 3.用户管理
- 4.角色管理
- 5. 权限管理
- 6. 部门管理
- 7. 数据字典
- 8.文件管理
- 9.系统配置
- 10.电子邮件
- 11.站内消息
- 12.数据监控
- 13.定时任务
- 14.在线用户
- 15.任务日志
- 16.行为日志
- 17.环境监控
- 三、部分代码
- SysUserMapper.java
- SysUserController.java
- SysUser.java
- 四、其他
- 获取源码
一、系统介绍
本系统实现了低代码开发平台,管理端实现了管理员登录、 主页、用户管理、角色管理、权限管理、部门管理、数据字典、文件管理、系统配置、电子邮件、站内消息、数据监控、定时任务、在线用户、任务日志、行为日志、环境监控
1.环境配置
JDK版本:1.8
Mysql:5.7
二、系统展示
1. 管理员登录
登录用户名密码:admin 123456
2.主页
3.用户管理
4.角色管理
5. 权限管理
6. 部门管理
7. 数据字典
8.文件管理
9.系统配置
10.电子邮件
11.站内消息
12.数据监控
13.定时任务
14.在线用户
15.任务日志
16.行为日志
17.环境监控
三、部分代码
SysUserMapper.java
package com.modules.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.modules.sys.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {
/**
* Describe: 重置部门
* Param: deptId
* Return: Integer
*/
Integer resetDeptByDeptId(String deptId);
/**
* Describe: 批量重置部门
* Param: deptIds
* Return: Integer
*/
Integer resetDeptByDeptIds(String[] deptIds);
}
SysUserController.java
package com.modules.sys.controller;
import com.github.pagehelper.PageInfo;
import com.common.constant.ControllerConstant;
import com.common.aop.annotation.Log;
import com.common.aop.enums.BusinessType;
import com.common.aop.annotation.Repeat;
import com.common.context.UserContext;
import com.common.web.base.BaseController;
import com.common.web.domain.request.PageDomain;
import com.common.web.domain.response.Result;
import com.common.web.domain.response.module.ResultTable;
import com.modules.sys.domain.SysUser;
import com.modules.sys.domain.SysPassword;
import com.modules.sys.service.SysRoleService;
import com.modules.sys.service.SysUserService;
import com.modules.sys.service.SysLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.logging.log4j.util.Strings;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.Arrays;
@RestController
@Api(tags = {"用户管理"})
@RequestMapping(ControllerConstant.API_SYSTEM_PREFIX + "user")
public class SysUserController extends BaseController {
/**
* Describe: 基础路径
*/
private static String MODULE_PATH = "system/user/";
/**
* Describe: 用户模块服务
*/
@Resource
private SysUserService sysUserService;
/**
* Describe: 角色模块服务
*/
@Resource
private SysRoleService sysRoleService;
/**
* Describe: 日志模块服务
*/
@Resource
private SysLogService sysLogService;
/**
* Describe: 密码加密
* */
@Resource
private PasswordEncoder passwordEncoder;
/**
* Describe: 获取用户列表视图
* Param ModelAndView
* Return 用户列表视图
*/
@GetMapping("main")
@ApiOperation(value = "获取用户列表视图")
@PreAuthorize("hasPermission('/system/user/main','sys:user:main')")
public ModelAndView main() {
return jumpPage(MODULE_PATH + "main");
}
/**
* Describe: 获取用户列表数据
* Param ModelAndView
* Return 用户列表数据
*/
@GetMapping("data")
@ApiOperation(value = "获取用户列表数据")
@PreAuthorize("hasPermission('/system/user/data','sys:user:data')")
@Log(title = "查询用户", describe = "查询用户", type = BusinessType.QUERY)
public ResultTable data(PageDomain pageDomain, SysUser param) {
PageInfo<SysUser> pageInfo = sysUserService.page(param, pageDomain);
return pageTable(pageInfo.getList(), pageInfo.getTotal());
}
/**
* Describe: 用户新增视图
* Param ModelAndView
* Return 返回用户新增视图
*/
@GetMapping("add")
@ApiOperation(value = "获取用户新增视图")
@PreAuthorize("hasPermission('/system/user/add','sys:user:add')")
public ModelAndView add(Model model) {
model.addAttribute("sysRoles", sysRoleService.list(null));
return jumpPage(MODULE_PATH + "add");
}
/**
* Describe: 用户新增接口
* Param ModelAndView
* Return 操作结果
*/
@Repeat
@PostMapping("save")
@ApiOperation(value = "保存用户数据")
@PreAuthorize("hasPermission('/system/user/add','sys:user:add')")
@Log(title = "新增用户", describe = "新增用户", type = BusinessType.ADD)
public Result save(@RequestBody SysUser sysUser) {
sysUser.setLogin("0");
sysUser.setEnable("1");
sysUser.setStatus("1");
sysUser.setPassword(passwordEncoder.encode(sysUser.getPassword()));
sysUserService.save(sysUser);
sysUserService.saveUserRole(sysUser.getUserId(), Arrays.asList(sysUser.getRoleIds().split(",")));
return success("保存成功");
}
/**
* Describe: 用户修改视图
* Param ModelAndView
* Return 返回用户修改视图
*/
@GetMapping("edit")
@ApiOperation(value = "获取用户修改视图")
@PreAuthorize("hasPermission('/system/user/edit','sys:user:edit')")
public ModelAndView edit(Model model, String userId) {
model.addAttribute("sysRoles", sysUserService.getUserRole(userId));
model.addAttribute("sysUser", sysUserService.getById(userId));
return jumpPage(MODULE_PATH + "edit");
}
/**
* Describe: 用户密码修改视图
* Param ModelAndView
* Return 返回用户密码修改视图
*/
@GetMapping("editpasswordadmin")
@ApiOperation(value = "获取管理员修改用户密码视图")
@PreAuthorize("hasPermission('/system/user/editPasswordAdmin','sys:user:editPasswordAdmin')")
public ModelAndView editPasswordAdminView(Model model, String userId) {
model.addAttribute("userId", userId);
return jumpPage(MODULE_PATH + "editPasswordAdmin");
}
/**
* Describe: 管理员修改用户密码接口
* Param editPassword
* Return: Result
*/
@PutMapping("editPasswordAdmin")
@ApiOperation(value = "管理员修改用户密码")
@PreAuthorize("hasPermission('/system/user/editPasswordAdmin','sys:user:editPasswordAdmin')")
public Result editPasswordAdmin(@RequestBody SysUser sysUser) {
sysUser.setPassword(passwordEncoder.encode(sysUser.getPassword()));
return decide(sysUserService.updateById(sysUser), "修改成功", "修改失败");
}
/**
* Describe: 用户密码修改视图
* Param ModelAndView
* Return 返回用户密码修改视图
*/
@GetMapping("editPassword")
public ModelAndView editPasswordView() {
return jumpPage(MODULE_PATH + "password");
}
/**
* Describe: 用户密码修改接口
* Param editPassword
* Return: Result
*/
@PutMapping("editPassword")
public Result editPassword(@RequestBody SysPassword sysPassword) {
String oldPassword = sysPassword.getOldPassword();
String newPassword = sysPassword.getNewPassword();
String confirmPassword = sysPassword.getConfirmPassword();
SysUser sysUser = UserContext.currentUser();
SysUser editUser = sysUserService.getById(sysUser.getUserId());
if (Strings.isBlank(confirmPassword) || Strings.isBlank(newPassword) || Strings.isBlank(oldPassword)) {
return failure("输入不能为空");
}
if (!new BCryptPasswordEncoder().matches(oldPassword, editUser.getPassword())) {
return failure("密码验证失败");
}
if (!newPassword.equals(confirmPassword)) {
return failure("两次密码输入不一致");
}
editUser.setPassword(passwordEncoder.encode(newPassword));
boolean result = sysUserService.updateById(editUser);
return decide(result, "修改成功", "修改失败");
}
/**
* Describe: 用户修改接口
* Param ModelAndView
* Return 返回用户修改接口
*/
@PutMapping("update")
@ApiOperation(value = "修改用户数据")
@PreAuthorize("hasPermission('/system/user/edit','sys:user:edit')")
@Log(title = "修改用户", describe = "修改用户", type = BusinessType.EDIT)
public Result update(@RequestBody SysUser sysUser) {
sysUserService.saveUserRole(sysUser.getUserId(), Arrays.asList(sysUser.getRoleIds().split(",")));
sysUserService.updateById(sysUser);
return success("修改成功");
}
/**
* Describe: 头像修改接口
* Param: SysUser
* Return: Result
*/
@PutMapping("updateAvatar")
@ApiOperation(value = "修改用户头像")
@Log(title = "修改头像", describe = "修改头像", type = BusinessType.EDIT)
public Result updateAvatar(@RequestBody SysUser sysUser) {
String userId = UserContext.currentUser().getUserId();
sysUser.setUserId(userId);
return decide(sysUserService.updateById(sysUser));
}
/**
* Describe: 用户批量删除接口
* Param: ids
* Return: Result
*/
@DeleteMapping("batchRemove/{ids}")
@ApiOperation(value = "批量删除用户")
@PreAuthorize("hasPermission('/system/user/remove','sys:user:remove')")
@Log(title = "删除用户", describe = "删除用户", type = BusinessType.REMOVE)
public Result batchRemove(@PathVariable String ids) {
return decide(sysUserService.batchRemove(ids.split(",")));
}
/**
* Describe: 用户删除接口
* Param: id
* Return: Result
*/
@Transactional(rollbackFor = Exception.class)
@DeleteMapping("remove/{id}")
@ApiOperation(value = "删除用户数据")
@PreAuthorize("hasPermission('/system/user/remove','sys:user:remove')")
@Log(title = "删除用户", describe = "删除用户", type = BusinessType.REMOVE)
public Result remove(@PathVariable String id) {
return decide(sysUserService.remove(id));
}
/**
* Describe: 根据 userId 开启用户
* Param: SysUser
* Return: 执行结果
*/
@PutMapping("enable")
@ApiOperation(value = "开启用户登录")
public Result enable(@RequestBody SysUser sysUser) {
sysUser.setEnable("1");
return decide(sysUserService.updateById(sysUser));
}
/**
* Describe: 根据 userId 禁用用户
* Param: SysUser
* Return: 执行结果
*/
@PutMapping("disable")
@ApiOperation(value = "禁用用户登录")
public Result disable(@RequestBody SysUser sysUser) {
sysUser.setEnable("0");
return decide(sysUserService.updateById(sysUser));
}
/**
* Describe: 个人资料
* Param: null
* Return: ModelAndView
*/
@GetMapping("center")
@ApiOperation(value = "个人资料")
public ModelAndView center(Model model) {
SysUser sysUser = UserContext.currentUser();
model.addAttribute("userInfo", sysUserService.getById(sysUser.getUserId()));
model.addAttribute("logs", sysLogService.selectTopLoginLog(sysUser.getUsername()));
return jumpPage(MODULE_PATH + "center");
}
/**
* Describe: 用户修改接口
* Param ModelAndView
* Return 返回用户修改接口
*/
@PutMapping("updateInfo")
@ApiOperation(value = "修改用户数据")
public Result updateInfo(@RequestBody SysUser sysUser) {
return decide(sysUserService.updateById(sysUser));
}
/**
* Describe: 更换头像
* Param: null
* Return: ModelAndView
*/
@GetMapping("profile/{id}")
public ModelAndView profile(Model model, @PathVariable("id") String userId) {
model.addAttribute("userId", userId);
return jumpPage(MODULE_PATH + "profile");
}
}
SysUser.java
package com.modules.sys.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.common.web.base.BaseDomain;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.apache.ibatis.type.Alias;
import org.springframework.security.core.CredentialsContainer;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
/**
* Describe: 用户领域模型
* @author 就 眠 仪 式
* @date 2019/10/23
*/
@Data
@Alias("SysUser")
@TableName("sys_user")
@JsonIgnoreProperties(ignoreUnknown = true)
public class SysUser extends BaseDomain implements UserDetails, CredentialsContainer {
/**
* 编号
*/
@TableId
private String userId;
/**
* 账户
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 盐
*/
private String salt;
/**
* 状态
*/
private String status;
/**
* 姓名
*/
private String realName;
/**
* 邮箱
*/
private String email;
/**
* 头像
*/
private String avatar;
/**
* 性别
*/
private String sex;
/**
* 电话
*/
private String phone;
/**
* 所属部门
*/
private String deptId;
/**
* 是否启用
*/
private String enable;
/**
* 是否登录
*/
private String login;
/**
* 上次登录
*/
private LocalDateTime lastTime;
/**
* 角色列表
*/
@TableField(exist = false)
private String roleIds;
/**
* 角色列表
* */
@TableField(exist = false)
private List<SysRole> roles;
/**
* 权限列表
*/
@TableField(exist = false)
private List<SysPower> powerList;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return "1".equals(this.getStatus()) ? true : false;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return "1".equals(this.getEnable()) ? true : false;
}
@Override
public void eraseCredentials() {
this.password = null;
}
}
四、其他
获取源码
点击以下链接获取源码。
IDEA + Spring Boot + Security + MyBatis Plus+Mysql低代码快速开发平台
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实现图书管理系统源码