1. 添加用户管理相关接口开发

topo_dev
xueqingkun 11 months ago
parent afc05b833e
commit 81d91229a3

@ -155,7 +155,11 @@
<version>1.12.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
</dependencies>

@ -0,0 +1,90 @@
package com.supervision.config;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import com.supervision.utils.TokenUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.http.HttpStatus;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class JwtInterceptor implements HandlerInterceptor {
public JwtInterceptor() {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//请求消息头获取用户ID
String token = request.getHeader("token");
if (StrUtil.isBlank(token)) {
// 如果是swagger来的接口,说明这里是测试的,会伪造一个用户
String referer = request.getHeader("Referer");
if (StrUtil.isNotBlank(referer) && StrUtil.contains(referer, "swagger-ui")) {
cacheAuth(JWTUtil.parseToken(devActiveUser()));
return true;
} else {
throw new BusinessException("当前用户未登录", HttpStatus.UNAUTHORIZED.value());
}
}
JWT jwt = JWTUtil.parseToken(token);
// 校验token是否过期,如果过期了,需要提示过期重新登录
checkTokenExpire(jwt);
cacheAuth(jwt);
return true;
}
@Override
public void afterCompletion(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler,
@Nullable Exception ex) throws Exception {
// 请求结束,将用户信息从thread中移除
clearAuth();
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
private void checkTokenExpire(JWT jwt) {
Object expireTime = jwt.getPayload("expireTime");
long l = Long.parseLong(String.valueOf(expireTime));
// 校验是否比当前时间大
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis > l) {
throw new BusinessException("用户登录已过期,请重新登录", HttpStatus.UNAUTHORIZED.value());
}
}
private void cacheAuth(JWT jwt) {
try {
JSONObject claimsJson = jwt.getPayload().getClaimsJson();
ThreadCache.USER.set(claimsJson.toString());
} catch (Exception e) {
log.error("用户信息异常", e);
}
}
private String devActiveUser() {
Map<String, Object> map = new HashMap<>();
map.put("id", "1");
map.put("account", "test");
map.put("name", "测试");
return TokenUtil.creatToken(JSONUtil.toJsonStr(map));
}
private void clearAuth() {
ThreadCache.USER.remove();
}
}

@ -0,0 +1,30 @@
/*
* : ThreadCache
* :
* : <>
* : RedName
* : 2023/9/4
* : <>
* : <>
* : <>
*/
package com.supervision.config;
/**
* <>
*
* @author ljt
* @version [, 2023/9/4]
* @see [/]
* @since [/]
*/
public class ThreadCache {
/**
* ID
*/
public static final ThreadLocal<String> USER = new ThreadLocal<>();
}

@ -0,0 +1,56 @@
package com.supervision.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加权限拦截器
registry.addInterceptor(new JwtInterceptor())
.addPathPatterns("/**")
.excludePathPatterns(ignorePathPatterns());
}
public List<String> ignorePathPatterns() {
List<String> paths = new ArrayList<>();
paths.add("/swagger-resources/**");
paths.add("/webjars/**");
paths.add("/v3/**");
paths.add("/swagger-ui.html/**");
paths.add("/swagger-ui/**");
paths.add("/webjars/");
paths.add("/doc.html/**");
paths.add("/error");
paths.add("/favicon.ico");
paths.add("/user/login");
paths.add("/user/register");
paths.add("/user/changePassWord");
paths.add("/user/checkAccount");
paths.add("/webSocket/**");
paths.add("/ask/downloadTalkVideo");
paths.add("/fileManage/downloadFile");
paths.add("/aqLibrary/downloadQuestionLibraryTemplate");
paths.add("/medicalRecManage/downloadMedicalAnswerTemplate");
paths.add("/qaKnowledge/**");
// 开发环境,放开不校验token.每次修改这里需要重启(热部署不行)
// paths.add("/**");
return paths;
}
}

@ -0,0 +1,28 @@
package com.supervision.police.controller;
import com.supervision.police.dto.MenuDTO;
import com.supervision.police.service.SystemMenuService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "菜单管理")
@RestController
@Slf4j
@RequestMapping("/menu")
@RequiredArgsConstructor
public class MenuController {
private final SystemMenuService menuService;
@Operation(summary = "查看用户信息列表")
@GetMapping("/listMenu")
public List<MenuDTO> listMenu() {
return menuService.listMenu();
}
}

@ -0,0 +1,44 @@
package com.supervision.police.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.dto.RoleDTO;
import com.supervision.police.service.SystemRoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@Tag(name = "用户角色管理")
@RestController
@RequestMapping("/roleManage")
@RequiredArgsConstructor
public class RoleController {
private final SystemRoleService roleService;
@Operation(summary = "新增角色")
@PostMapping("/save")
public String saveRole(@RequestBody RoleDTO roleDTO) {
return roleService.saveRole(roleDTO);
}
@Operation(summary = "修改角色")
@PostMapping("/update")
public void updateRole(@RequestBody RoleDTO roleDTO) {
roleService.updateRole(roleDTO);
}
@Operation(summary = "删除角色")
@DeleteMapping("/delete")
public Boolean deleteRole(@Parameter(name = "id") @RequestParam(name="id") String id) {
return roleService.deleteRole(id);
}
@Operation(summary = "查看角色列表")
@GetMapping("/list")
public IPage<RoleDTO> list(@Parameter(name = "roleName",description = "角色名称") @RequestParam(required = false) String roleName,
@Parameter(name = "pageNum",description = "页码") @RequestParam(defaultValue = "1") Integer pageNum,
@Parameter(name = "pageSize",description = "每页大小") @RequestParam(defaultValue = "10") Integer pageSize) {
return roleService.list(roleName, pageNum, pageSize);
}
}

@ -0,0 +1,69 @@
package com.supervision.police.controller;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.dto.user.*;
import com.supervision.police.service.SystemUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@Tag(name = "用户管理")
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {
private final SystemUserService userService;
@Operation(summary = "登录")
@PostMapping("/login")
public LoginResVO login(@RequestBody LoginReqVO reqVO) {
return userService.login(reqVO);
}
@Operation(summary = "新增用户信息")
@PostMapping("/saveUserInfo")
public String saveUserInfo(@RequestBody UserInfoReqVo userInfoReqVo) {
return userService.saveUserInfo(userInfoReqVo);
}
@Operation(summary = "修改用户信息")
@PostMapping("/update")
public void updateUser(@RequestBody UserInfoReqVo userInfoReqVo) {
userService.updateUserInfo(userInfoReqVo);
}
@Operation(summary = "修改用户状态")
@PostMapping("/updateUserStatus")
public void updateUserStatus(@RequestBody UserStatusReqVo userStatusReqVo) {
userService.updateUserStatus(userStatusReqVo);
}
@Operation(summary = "删除用户信息")
@DeleteMapping("/delete")
public Boolean deleteUser(@Parameter(name = "id") @RequestParam(name="id") String id) {
return userService.deleteUser(id);
}
@Operation(summary = "查看用户信息列表")
@GetMapping("/list")
public IPage<UserInfoDTO> list(@Parameter(name = "userName",description = "用户名") @RequestParam(required = false) String userName,
@Parameter(name = "roleId",description = "角色id") @RequestParam(required = false) String roleId,
@Parameter(name = "roleName",description = "角色名") @RequestParam(required = false) String roleName,
@Parameter(name = "pageNum",description = "页码") @RequestParam(defaultValue = "1") Integer pageNum,
@Parameter(name = "pageSize",description = "每页大小") @RequestParam(defaultValue = "10") Integer pageSize) {
return userService.list(userName, roleId, roleName, pageNum, pageSize);
}
}

@ -1,9 +1,11 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
@ -33,7 +35,7 @@ public class SystemMenu implements Serializable {
/**
* 0: 1:
*/
private Integer lableType;
private Integer labelType;
/**
* id
@ -48,7 +50,8 @@ public class SystemMenu implements Serializable {
/**
*
*/
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
/**
*
@ -58,7 +61,8 @@ public class SystemMenu implements Serializable {
/**
*
*/
private Date updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;

@ -1,9 +1,11 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
@ -38,7 +40,8 @@ public class SystemRole implements Serializable {
/**
*
*/
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
/**
*
@ -48,7 +51,8 @@ public class SystemRole implements Serializable {
/**
*
*/
private Date updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;

@ -0,0 +1,63 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
*
* @TableName system_role_menu_relation
*/
@TableName(value ="system_role_menu_relation")
@Data
public class SystemRoleMenuRelation implements Serializable {
/**
* id
*/
private String id;
/**
* id
*/
private String roleId;
/**
* id
*/
private String menuId;
/**
* ID
*/
private String createUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
/**
*
*/
private String updateUserId;
/**
*
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public SystemRoleMenuRelation() {
}
public SystemRoleMenuRelation(String roleId, String menuId) {
this.roleId = roleId;
this.menuId = menuId;
}
}

@ -1,9 +1,11 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
@ -33,7 +35,7 @@ public class SystemUser implements Serializable {
/**
*
*/
private String username;
private String userName;
/**
*
@ -50,11 +52,6 @@ public class SystemUser implements Serializable {
*/
private String userPd;
/**
* ID
*/
private String deptId;
/**
*
*/
@ -63,7 +60,7 @@ public class SystemUser implements Serializable {
/**
*
*/
private Date recentLoginTime;
private LocalDateTime recentLoginTime;
/**
* ID
@ -73,7 +70,8 @@ public class SystemUser implements Serializable {
/**
*
*/
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
/**
*
@ -83,7 +81,8 @@ public class SystemUser implements Serializable {
/**
*
*/
private Date updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;

@ -1,9 +1,11 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
@ -38,7 +40,8 @@ public class SystemUserRoleRelation implements Serializable {
/**
*
*/
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
/**
*
@ -48,7 +51,8 @@ public class SystemUserRoleRelation implements Serializable {
/**
*
*/
private Date updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;

@ -0,0 +1,44 @@
package com.supervision.police.dto;
import com.supervision.police.domain.SystemMenu;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import java.util.Objects;
@Data
public class MenuDTO {
@Schema(description = "菜单id")
private String id;
@Schema(description = "标签(菜单名或按钮名)")
private String label;
@Schema(description = "标签码 前端权限使用")
private String labelCode;
@Schema(description = "标签类型 0: 菜单 1:标签 默认菜单")
private Integer labelType;
@Schema(description = "父级id")
private String parentId;
@Schema(description = "子菜单")
private List<MenuDTO> children;
public MenuDTO() {
}
public MenuDTO(SystemMenu systemMenu) {
if (Objects.isNull(systemMenu)){
return;
}
this.id = systemMenu.getId();
this.label = systemMenu.getLabel();
this.labelCode = systemMenu.getLabelCode();
this.labelType = systemMenu.getLabelType();
this.parentId = systemMenu.getParentId();
}
}

@ -0,0 +1,69 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.supervision.police.domain.SystemRole;
import com.supervision.police.domain.SystemRoleMenuRelation;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Data
public class RoleDTO {
@Schema(description = "角色id")
private String id;
@Schema(description = "角色名称")
private String roleName;
@Schema(description = "备注")
private String remark;
@Schema(description = "菜单id列表")
private List<String> menuIdList;
@Schema(description = "关联用户数量")
private int userCount;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime updateTime;
public RoleDTO() {
}
public RoleDTO(SystemRole role, Long userCount, List<SystemRoleMenuRelation> roleMenuRelationList) {
if (Objects.isNull(role)){
return;
}
this.id = role.getId();
this.roleName = role.getRoleName();
this.remark = role.getRemark();
this.updateTime = role.getUpdateTime();
this.userCount = userCount.intValue();
if (CollUtil.isNotEmpty(roleMenuRelationList)){
this.menuIdList = roleMenuRelationList.stream().map(SystemRoleMenuRelation::getMenuId).toList();
}
}
public SystemRole toSystemRole() {
SystemRole systemRole = new SystemRole();
systemRole.setId(this.id);
systemRole.setRoleName(this.roleName);
systemRole.setRemark(this.remark);
return systemRole;
}
public List<SystemRoleMenuRelation> menuIdListToRoleMenu() {
if (CollUtil.isEmpty(this.menuIdList)){
return new ArrayList<>();
}
return this.menuIdList.stream().map(menuId -> new SystemRoleMenuRelation(this.id,menuId)).toList();
}
}

@ -0,0 +1,11 @@
package com.supervision.police.dto.user;
import lombok.Data;
@Data
public class LoginReqVO {
private String userAccount;
private String password;
}

@ -0,0 +1,70 @@
package com.supervision.police.dto.user;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.supervision.police.domain.SystemUser;
import com.supervision.utils.TokenUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Data
public class LoginResVO {
@Schema(description = "主键")
private String id;
@Schema(description = "用户账户")
private String account;
@Schema(description = "用户名称")
private String userName;
@Schema(description = "用户角色编码")
private String roleCode;
@Schema(description = "菜单权限标识")
private List<String> permission = new ArrayList<>();
@Schema(description = "token")
private String token;
public LoginResVO() {
}
public LoginResVO(SystemUser systemUser) {
if (Objects.isNull(systemUser)){
return;
}
this.id = systemUser.getId();
this.account = systemUser.getAccount();
this.userName = systemUser.getUserName();
}
public void setToken(UserInfoDTO userInfoDTO) {
if (Objects.isNull(userInfoDTO)){
return;
}
this.token = TokenUtil.creatToken(JSONUtil.toJsonStr(userInfoDTO));
}
public void setToken(String token) {
this.token = token;
}
public void setPermission(List<String> permission) {
this.permission = permission;
}
public void roleMenuDTOSetPermission(List<RoleMenuDTO> roleMenuDTOS) {
if (CollUtil.isEmpty(roleMenuDTOS)){
return;
}
this.permission = roleMenuDTOS.stream().map(RoleMenuDTO::getLabelCode).collect(Collectors.toList());
}
}

@ -0,0 +1,24 @@
package com.supervision.police.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class RoleMenuDTO {
@Schema(description = "角色id")
private String roleId;
@Schema(description = "用户id")
private String userId;
@Schema(description = "菜单id")
private String menuId;
@Schema(description = "菜单名称")
private String label;
@Schema(description = "菜单编码")
private String labelCode;
}

@ -0,0 +1,81 @@
package com.supervision.police.dto.user;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableId;
import com.supervision.police.domain.SystemUser;
import lombok.Data;
import org.springframework.scheduling.support.SimpleTriggerContext;
import java.time.LocalDateTime;
import java.util.*;
@Data
public class UserInfoDTO {
/**
*
*/
@TableId
private String id;
/**
* id
*/
private String headPicId;
/**
*
*/
private String account;
/**
*
*/
private String userName;
/**
*
*/
private String phoneNum;
/**
* 0 1
*/
private Integer status;
private List<UserRoleDTO> userRoleList;
/**
*
*/
private LocalDateTime recentLoginTime;
public UserInfoDTO() {
}
public UserInfoDTO(SystemUser systemUser) {
systemUserSetter(systemUser);
}
public UserInfoDTO(SystemUser systemUser, Map<String, List<UserRoleDTO>> userRoleMap) {
systemUserSetter(systemUser);
if (StrUtil.isNotEmpty(this.id)){
this.setUserRoleList(userRoleMap.getOrDefault(this.id, new ArrayList<>(1)));
}
}
private void systemUserSetter(SystemUser systemUser){
if (Objects.isNull(systemUser)){
return;
}
this.id = systemUser.getId();
this.headPicId = systemUser.getHeadPicId();
this.account = systemUser.getAccount();
this.userName = systemUser.getUserName();
this.phoneNum = systemUser.getPhoneNum();
this.status = systemUser.getStatus();
this.recentLoginTime = systemUser.getRecentLoginTime();
}
}

@ -0,0 +1,52 @@
package com.supervision.police.dto.user;
import com.supervision.police.domain.SystemUser;
import com.supervision.utils.UserUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class UserInfoReqVo {
@Schema(description = "用户id")
private String id;
@Schema(description = "头像ID")
private String headPicId;
@Schema(description = "账号")
private String account;
@Schema(description = "用户名")
private String userName;
@Schema(description = "密码")
private String password;
@Schema(description = "手机号")
private String phoneNum;
@Schema(description = "账号状态 0正常 1停用")
private Integer status;
@Schema(description = "角色ID列表")
private List<String> roleIdList;
@Schema(description = "备注")
private String remark;
public SystemUser toSystemUser() {
SystemUser systemUser = new SystemUser();
systemUser.setId(id);
systemUser.setHeadPicId(headPicId);
systemUser.setAccount(account);
systemUser.setUserName(userName);
systemUser.setUserPd(password);
systemUser.setRemark(remark);
systemUser.setStatus(status);
systemUser.setUserPd(UserUtil.signPassword(this.getPassword()));
return systemUser;
}
}

@ -0,0 +1,15 @@
package com.supervision.police.dto.user;
import lombok.Data;
@Data
public class UserRoleDTO {
private String userId;
private String roleId;
private String roleName;
private Integer roleType;
}

@ -0,0 +1,14 @@
package com.supervision.police.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class UserStatusReqVo {
@Schema(description = "用户ID")
private String id;
@Schema(description = "用户状态 0正常 1停用")
private String status;
}

@ -0,0 +1,18 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.SystemRoleMenuRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description system_role_menu_relation()Mapper
* @createDate 2024-07-31 15:02:36
* @Entity com.supervision.police.domain.SystemRoleMenuRelation
*/
public interface SystemRoleMenuRelationMapper extends BaseMapper<SystemRoleMenuRelation> {
}

@ -2,6 +2,11 @@ package com.supervision.police.mapper;
import com.supervision.police.domain.SystemUserRoleRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.police.dto.user.RoleMenuDTO;
import com.supervision.police.dto.user.UserRoleDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Administrator
@ -11,6 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SystemUserRoleRelationMapper extends BaseMapper<SystemUserRoleRelation> {
List<UserRoleDTO> listUserRole(@Param("userId") String userId, @Param("roleId") String roleId,
@Param("roleName") String roleName);
List<RoleMenuDTO> listUserRoleMenu(String userId);
}

@ -2,6 +2,9 @@ package com.supervision.police.service;
import com.supervision.police.domain.SystemMenu;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.MenuDTO;
import java.util.List;
/**
* @author Administrator
@ -10,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SystemMenuService extends IService<SystemMenu> {
List<MenuDTO> listMenu();
}

@ -0,0 +1,22 @@
package com.supervision.police.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.SystemRoleMenuRelation;
import com.supervision.police.domain.SystemUserRoleRelation;
import java.util.List;
/**
* @author Administrator
* @description system_role_menu_relation()Service
* @createDate 2024-07-31 15:02:36
*/
public interface SystemRoleMenuRelationService extends IService<SystemRoleMenuRelation> {
void updateRoleMenu(String roleId, List<String> menuIds);
void deleteRoleMenu(String roleId);
List<SystemRoleMenuRelation> listRoleMenuByRoleIdList(List<String> roleIdList);
}

@ -1,7 +1,9 @@
package com.supervision.police.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.domain.SystemRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.RoleDTO;
/**
* @author Administrator
@ -10,4 +12,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SystemRoleService extends IService<SystemRole> {
String saveRole(RoleDTO roleDTO);
void updateRole(RoleDTO roleDTO);
Boolean deleteRole(String id);
IPage<RoleDTO> list(String roleName, Integer pageNum, Integer pageSize);
}

@ -2,6 +2,10 @@ package com.supervision.police.service;
import com.supervision.police.domain.SystemUserRoleRelation;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.user.RoleMenuDTO;
import com.supervision.police.dto.user.UserRoleDTO;
import java.util.List;
/**
* @author Administrator
@ -10,4 +14,21 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SystemUserRoleRelationService extends IService<SystemUserRoleRelation> {
List<UserRoleDTO> listUserRole(String userId, String roleId, String roleName);
List<SystemUserRoleRelation> saveUserRoleRelation(String userId, List<String> roleIdList);
List<SystemUserRoleRelation> updateUserRoleRelation(String userId, List<String> roleIdList);
void deleteUserRoleRelation(String userId);
/**
*
* @param userId id
* @return
*/
List<RoleMenuDTO> listUserRoleMenu(String userId);
List<SystemUserRoleRelation> listUserRoleByRoleIdList(List<String> roleIdList);
}

@ -1,7 +1,11 @@
package com.supervision.police.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.police.domain.SystemUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.user.*;
import java.util.List;
/**
* @author Administrator
@ -10,4 +14,19 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SystemUserService extends IService<SystemUser> {
LoginResVO login(LoginReqVO reqVO);
UserInfoDTO getUserAccountInfo();
String saveUserInfo(UserInfoReqVo userInfoReqVo);
void updateUserInfo(UserInfoReqVo userInfoReqVo);
Boolean deleteUser(String id);
IPage<UserInfoDTO> list(String userName, String roleId, String roleName, Integer pageNum, Integer pageSize);
void updateUserStatus(UserStatusReqVo userStatusReqVo);
}

@ -1,11 +1,17 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.SystemMenu;
import com.supervision.police.dto.MenuDTO;
import com.supervision.police.service.SystemMenuService;
import com.supervision.police.mapper.SystemMenuMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
* @description system_menu()Service
@ -15,6 +21,22 @@ import org.springframework.stereotype.Service;
public class SystemMenuServiceImpl extends ServiceImpl<SystemMenuMapper, SystemMenu>
implements SystemMenuService{
@Override
public List<MenuDTO> listMenu() {
List<SystemMenu> systemMenuList = super.list();
if (CollUtil.isEmpty(systemMenuList)){
return new ArrayList<>();
}
List<MenuDTO> menuDTOList = systemMenuList.stream().map(MenuDTO::new).toList();
for (MenuDTO menuDTO : menuDTOList) {
List<MenuDTO> children = menuDTOList.stream()
.filter(item -> menuDTO.getId().equals(item.getParentId())).toList();
menuDTO.setChildren(children);
}
return menuDTOList.stream().filter(item -> StrUtil.isEmpty(item.getParentId())).toList();
}
}

@ -0,0 +1,52 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.SystemRoleMenuRelation;
import com.supervision.police.domain.SystemUserRoleRelation;
import com.supervision.police.service.SystemRoleMenuRelationService;
import com.supervision.police.mapper.SystemRoleMenuRelationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
* @description system_role_menu_relation()Service
* @createDate 2024-07-31 15:02:36
*/
@Service
public class SystemRoleMenuRelationServiceImpl extends ServiceImpl<SystemRoleMenuRelationMapper, SystemRoleMenuRelation>
implements SystemRoleMenuRelationService {
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public void updateRoleMenu(String roleId, List<String> menuIds) {
Assert.notEmpty(roleId, "角色id不能为空");
if (CollUtil.isNotEmpty(menuIds)){
List<SystemRoleMenuRelation> list = menuIds.stream().map(menuId -> new SystemRoleMenuRelation(roleId, menuId)).toList();
list.forEach(super::save);
}
}
@Override
public void deleteRoleMenu(String roleId) {
super.remove(lambdaQuery().eq(SystemRoleMenuRelation::getRoleId, roleId));
}
@Override
public List<SystemRoleMenuRelation> listRoleMenuByRoleIdList(List<String> roleIdList) {
if(CollUtil.isEmpty(roleIdList)){
return new ArrayList<>();
}
return super.lambdaQuery().in(SystemRoleMenuRelation::getRoleId, roleIdList).list();
}
}

@ -1,20 +1,123 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.SystemRole;
import com.supervision.police.domain.SystemRoleMenuRelation;
import com.supervision.police.domain.SystemUserRoleRelation;
import com.supervision.police.dto.RoleDTO;
import com.supervision.police.service.SystemRoleMenuRelationService;
import com.supervision.police.service.SystemRoleService;
import com.supervision.police.mapper.SystemRoleMapper;
import com.supervision.police.service.SystemUserRoleRelationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Administrator
* @description system_role()Service
* @createDate 2024-07-31 11:02:43
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemRole>
implements SystemRoleService{
private final SystemRoleMenuRelationService systemRoleMenuRelationService;
private final SystemUserRoleRelationService systemUserRoleRelationService;
private final SystemRoleMenuRelationService roleMenuRelationService;
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public String saveRole(RoleDTO roleDTO) {
Assert.notEmpty(roleDTO.getRoleName(), "角色名称不能为空");
Long count = super.lambdaQuery().eq(SystemRole::getRoleName, roleDTO.getRoleName()).count();
Assert.isTrue(count == 0, "角色名称已存在");
// 保存角色
SystemRole systemRole = roleDTO.toSystemRole();
super.save(systemRole);
// 保存角色关联的菜单信息
if (CollUtil.isNotEmpty(roleDTO.getMenuIdList())){
roleDTO.setId(systemRole.getId());
roleDTO.menuIdListToRoleMenu().forEach(systemRoleMenuRelationService::save);
}
return systemRole.getId();
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public void updateRole(RoleDTO roleDTO) {
Assert.notEmpty(roleDTO.getId(), "角色id不能为空");
Assert.notEmpty(roleDTO.getRoleName(), "角色名称不能为空");
SystemRole dbSystemRole = super.getById(roleDTO.getId());
Assert.notNull(dbSystemRole, "角色不存在");
if (!StrUtil.equals(dbSystemRole.getRoleName(), roleDTO.getRoleName())){
// 判断角色名称是否重复
Long count = super.lambdaQuery().eq(SystemRole::getRoleName, roleDTO.getRoleName()).count();
Assert.isTrue(count == 0, "角色名称已存在");
}
dbSystemRole.setRoleName(roleDTO.getRoleName());
dbSystemRole.setRemark(roleDTO.getRemark());
// 更新角色基本数据
super.updateById(dbSystemRole);
// 更新角色关联的菜单信息
systemRoleMenuRelationService.updateRoleMenu(dbSystemRole.getId(), roleDTO.getMenuIdList());
}
@Override
public Boolean deleteRole(String roleId) {
Assert.notEmpty(roleId, "角色id不能为空");
boolean success = super.removeById(roleId);
if (success){
systemRoleMenuRelationService.deleteRoleMenu(roleId);
}
return success;
}
@Override
public IPage<RoleDTO> list(String roleName, Integer pageNum, Integer pageSize) {
Page<SystemRole> page = super.lambdaQuery().like(StrUtil.isNotEmpty(roleName), SystemRole::getRoleName, roleName)
.orderBy(true, false, SystemRole::getUpdateTime).page(new Page<>(pageNum, pageSize));
if (CollUtil.isEmpty(page.getRecords())){
return Page.of(pageNum, pageSize,page.getTotal());
}
List<String> roleIdList = page.getRecords().stream().map(SystemRole::getId).toList();
// 角色关联的用户数量
List<SystemUserRoleRelation> userRoleList = systemUserRoleRelationService.listUserRoleByRoleIdList(roleIdList);
Map<String, Long> roleCount = userRoleList.stream().collect(Collectors.groupingBy(SystemUserRoleRelation::getRoleId, Collectors.counting()));
// 角色关联的菜单数据
List<SystemRoleMenuRelation> roleMenuList = roleMenuRelationService.listRoleMenuByRoleIdList(roleIdList);
Map<String, List<SystemRoleMenuRelation>> roleMenuMap = roleMenuList.stream().collect(Collectors.groupingBy(SystemRoleMenuRelation::getRoleId));
return page.convert(systemRole ->
new RoleDTO(systemRole, roleCount.get(systemRole.getId()),roleMenuMap.get(systemRole.getId())));
}
}

@ -1,20 +1,90 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.SystemUserRoleRelation;
import com.supervision.police.dto.user.RoleMenuDTO;
import com.supervision.police.dto.user.UserRoleDTO;
import com.supervision.police.service.SystemUserRoleRelationService;
import com.supervision.police.mapper.SystemUserRoleRelationMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
* @description system_user_role_relation()Service
* @createDate 2024-07-31 11:02:43
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class SystemUserRoleRelationServiceImpl extends ServiceImpl<SystemUserRoleRelationMapper, SystemUserRoleRelation>
implements SystemUserRoleRelationService{
@Override
public List<UserRoleDTO> listUserRole(String userId, String roleId, String roleName) {
return super.getBaseMapper().listUserRole(userId,roleId,roleName);
}
@Override
public List<SystemUserRoleRelation> saveUserRoleRelation(String userId, List<String> roleIdList) {
Assert.notEmpty(userId, "用户id不能为空");
if (CollUtil.isEmpty(roleIdList)){
log.info("saveUserRoleRelation:userId:{},roleList is empty",userId);
return CollUtil.newArrayList();
}
List<SystemUserRoleRelation> userRoleList = roleIdList.stream().map(roleId -> {
SystemUserRoleRelation userRole = new SystemUserRoleRelation();
userRole.setRoleId(roleId);
userRole.setUserId(userId);
return userRole;
}).toList();
super.saveBatch(userRoleList);
return userRoleList;
}
@Override
public List<SystemUserRoleRelation> updateUserRoleRelation(String userId, List<String> roleIdList) {
Assert.notEmpty(userId, "用户id不能为空");
super.lambdaUpdate().eq(SystemUserRoleRelation::getUserId,userId).remove();
if (CollUtil.isEmpty(roleIdList)){
log.info("updateUserRoleRelation:userId:{},roleList is empty",userId);
return CollUtil.newArrayList();
}
return saveUserRoleRelation(userId,roleIdList);
}
@Override
public void deleteUserRoleRelation(String userId) {
super.lambdaUpdate().eq(SystemUserRoleRelation::getUserId,userId).remove();
}
@Override
public List<RoleMenuDTO> listUserRoleMenu(String userId) {
if (StrUtil.isEmpty(userId)){
return new ArrayList<>();
}
return super.getBaseMapper().listUserRoleMenu(userId);
}
@Override
public List<SystemUserRoleRelation> listUserRoleByRoleIdList(List<String> roleIdList) {
if (CollUtil.isEmpty(roleIdList)){
return CollUtil.newArrayList();
}
return super.lambdaQuery().in(SystemUserRoleRelation::getRoleId,roleIdList).list();
}
}

@ -1,20 +1,163 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.SystemUser;
import com.supervision.police.dto.user.*;
import com.supervision.police.service.SystemUserRoleRelationService;
import com.supervision.police.service.SystemUserService;
import com.supervision.police.mapper.SystemUserMapper;
import com.supervision.utils.UserUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Administrator
* @description system_user()Service
* @createDate 2024-07-31 11:02:43
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser>
implements SystemUserService{
private final SystemUserRoleRelationService userRoleRelationManageService;
@Override
@Transactional(rollbackFor = Exception.class)
public LoginResVO login(LoginReqVO reqVO) {
// 校验用户信息是否正确
Assert.isTrue(StrUtil.isAllNotEmpty(reqVO.getUserAccount(), reqVO.getPassword()), "用户名或密码不能为空");
SystemUser systemUser = super.getOne(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getAccount, reqVO.getUserAccount()));
Assert.notNull(systemUser, "用户名或密码有误!");
Assert.notNull(UserUtil.checkUserPassword(reqVO.getPassword(), systemUser.getUserPd()), "用户名或密码有误!");
Assert.isTrue(systemUser.getStatus() == 0, "该用户已被停用,请联系管理员!");
// 组装用户信息
LoginResVO loginResVO = new LoginResVO(systemUser);
// 设置用户token信息
loginResVO.setToken(new UserInfoDTO(systemUser));
// 设置用户权限信息
loginResVO.roleMenuDTOSetPermission(userRoleRelationManageService.listUserRoleMenu(systemUser.getId()));
return loginResVO;
}
@Override
public UserInfoDTO getUserAccountInfo() {
return UserUtil.getUser();
}
@Override
@Transactional(rollbackFor = Exception.class)
public String saveUserInfo(UserInfoReqVo userInfoReqVo) {
Assert.notEmpty(userInfoReqVo.getAccount(), "账号不能为空");
Assert.notEmpty(userInfoReqVo.getUserName(), "姓名不能为空");
Assert.notEmpty(userInfoReqVo.getPassword(), "密码不能为空");
Assert.notEmpty(userInfoReqVo.getRoleIdList(), "角色不能为空");
Long count = super.lambdaQuery().eq(SystemUser::getAccount, userInfoReqVo.getAccount()).count();
Assert.isTrue(count == 0, "用户名已存在");
SystemUser systemUser = userInfoReqVo.toSystemUser();
// 设置默认密码
super.save(systemUser);
userRoleRelationManageService.saveUserRoleRelation(systemUser.getId(), userInfoReqVo.getRoleIdList());
return systemUser.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUserInfo(UserInfoReqVo userInfoReqVo) {
Assert.notEmpty(userInfoReqVo.getId(), "用户id不能为空");
Assert.notEmpty(userInfoReqVo.getAccount(), "用户名不能为空");
Assert.notEmpty(userInfoReqVo.getUserName(), "姓名不能为空");
Assert.notEmpty(userInfoReqVo.getRoleIdList(), "角色不能为空");
Long count = super.lambdaQuery()
.eq(SystemUser::getAccount, userInfoReqVo.getAccount())
.ne(SystemUser::getId, userInfoReqVo.getId()).count();
Assert.isTrue(count == 0, "用户名已存在,请更改用户名");
super.lambdaUpdate()
.set(SystemUser::getHeadPicId, userInfoReqVo.getHeadPicId())
.set(SystemUser::getUserName, userInfoReqVo.getUserName())
.set(SystemUser::getAccount, userInfoReqVo.getAccount())
.set(SystemUser::getPhoneNum, userInfoReqVo.getPhoneNum())
.set(SystemUser::getStatus, userInfoReqVo.getStatus())
.set(SystemUser::getRemark, userInfoReqVo.getRemark())
.eq(SystemUser::getId, userInfoReqVo.getId())
.update();
userRoleRelationManageService.updateUserRoleRelation(userInfoReqVo.getId(), userInfoReqVo.getRoleIdList());
}
@Override
public Boolean deleteUser(String id) {
Assert.notEmpty(id, "用户id不能为空");
SystemUser systemUser = super.getById(id);
Assert.notNull(systemUser, "用户不存在");
Assert.isFalse(systemUser.getStatus() == 0, "该用户已启用,不能删除");
super.removeById(id);
userRoleRelationManageService.deleteUserRoleRelation(id);
return true;
}
@Override
public IPage<UserInfoDTO> list(String userName, String roleId, String roleName, Integer pageNum, Integer pageSize) {
List<UserRoleDTO> userRoleDTOS = new ArrayList<>();
// 先对角色进行判断
if (StrUtil.isNotEmpty(roleId) || StrUtil.isNotEmpty(roleName)){
userRoleDTOS = userRoleRelationManageService.listUserRole(null, roleId, roleName);
if (CollUtil.isEmpty(userRoleDTOS)){
return Page.of(pageNum, pageSize, 0);
}
}
//构建查询条件
Page<SystemUser> userInfoPage = super.page(Page.of(pageNum, pageSize),
new LambdaQueryWrapper<SystemUser>()
.eq(StrUtil.isNotEmpty(userName), SystemUser::getUserName, userName)
.in(CollUtil.isNotEmpty(userRoleDTOS), SystemUser::getId, userRoleDTOS.stream().map(UserRoleDTO::getUserId).toList()));
if (CollUtil.isEmpty(userInfoPage.getRecords())){
return Page.of(pageNum, pageSize, userInfoPage.getTotal());
}
Map<String, List<UserRoleDTO>> userRoleMap = userRoleDTOS.stream().collect(Collectors.groupingBy(UserRoleDTO::getUserId, Collectors.toList()));
return userInfoPage.convert(systemUser -> new UserInfoDTO(systemUser,userRoleMap));
}
@Override
public void updateUserStatus(UserStatusReqVo userStatusReqVo) {
Assert.notEmpty(userStatusReqVo.getId(), "用户id不能为空");
Assert.notNull(userStatusReqVo.getStatus(), "用户状态不能为空");
super.lambdaUpdate().set(SystemUser::getStatus, userStatusReqVo.getStatus())
.eq(SystemUser::getId, userStatusReqVo.getId()).update();
}
}

@ -0,0 +1,97 @@
package com.supervision.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
public class SM2Util {
private static SM2 sm2 = getSM2();
/**
* ; 使使
*/
public static void generateKey() {
KeyPair pair = SecureUtil.generateKeyPair("SM2");
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
System.out.println("private:"+Base64.encode(privateKey.getEncoded()));
System.out.println("public:"+Base64.encode(publicKey.getEncoded()));
}
/**
*
* @param content
* @param sign
* @return truefalse
*/
public static boolean verify(String content,String sign){
return sm2.verifyHex(HexUtil.encodeHexStr(content), sign);
}
/**
*
* @param content
* @return base64
*/
public static String encryptBase64(String content){
return sm2.encryptBase64(content,KeyType.PublicKey);
}
/**
*
* @param data
* @return
*/
public static String decrypt(String data){
return sm2.decryptStr(data, KeyType.PrivateKey);
}
/**
*
* @param content
* @return 142
*/
public static String sign(String content){
return sm2.signHex(HexUtil.encodeHexStr(content));
}
public static SM2 getSM2(){
String privateKey = ResourceUtil.readUtf8Str("secure/sm2_private.key");
String publicKey = ResourceUtil.readUtf8Str("secure/sm2_public.key");
return new SM2(privateKey, publicKey);
}
public static void main(String[] args) {
String content = "张三里斯忘我ss **##";
String encryptBase64 = encryptBase64(content);
System.out.println("加密结果:"+encryptBase64);
String decrypt = decrypt(encryptBase64);
System.out.println("解密结果:"+decrypt);
String sign = sign(content);
System.out.println("签名结果:"+sign);
boolean verify = verify(content, sign);
System.out.println("正向验证结果:"+verify);
boolean verify1 = verify("djaoidf", sign);
System.out.println("反向验证结果:"+verify1);
}
}

@ -0,0 +1,19 @@
package com.supervision.utils;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;
public class TokenUtil {
public static String creatToken(String userInfo){
final JWTSigner signer = JWTSignerUtil.hs256("~~||DDEdfdfee33s6$$".getBytes());
JSONObject info = JSONUtil.parseObj(userInfo);
// 过期时间一天,同时这个字段也作为单点登录使用
info.putOnce("expireTime",System.currentTimeMillis() + 1000 * 60 * 60 * 24);
info.putOnce("issueTime",System.currentTimeMillis());
return JWTUtil.createToken(info, signer);
}
}

@ -0,0 +1,54 @@
package com.supervision.utils;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import com.supervision.police.dto.user.UserInfoDTO;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class UserUtil {
public static UserInfoDTO getUser() {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
Assert.notNull(requestAttributes, "未获取到用户信息");
HttpServletRequest request = requestAttributes.getRequest();
String token = request.getHeader("token");
if (StrUtil.isBlank(token)) {
token = (String) request.getAttribute("token");
}
Assert.notEmpty(token, "未获取到用户token信息");
JWT jwt = JWTUtil.parseToken(token);
JSONObject claimsJson = jwt.getPayload().getClaimsJson();
UserInfoDTO bean = JSONUtil.toBean(claimsJson.toString(), UserInfoDTO.class);
Assert.notNull(bean, "未获取到用户信息");
return bean;
}
/**
*
* @param password
* @param userPd
* @return
*/
public static boolean checkUserPassword(String password, String userPd) {
return SM2Util.verify(password, userPd);
}
/**
*
* @param password
* @return
*/
public static String signPassword(String password){
return SM2Util.sign(password);
}
}

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.police.mapper.SystemRoleMenuRelationMapper">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.SystemRoleMenuRelation">
<result property="id" column="id" jdbcType="VARCHAR"/>
<result property="roleId" column="role_id" jdbcType="VARCHAR"/>
<result property="menuId" column="menu_id" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,role_id,menu_id,
create_user_id,create_time,update_user_id,
update_time
</sql>
</mapper>

@ -19,4 +19,32 @@
create_user_id,create_time,update_user_id,
update_time
</sql>
<select id="listUserRole" resultType="com.supervision.police.dto.user.UserRoleDTO">
select r.id as roleId,
r.role_name as roleName,
ur.user_id as userId
from system_role r
left join system_user_role_relation ur on r.id = ur.role_id
where 1=1
<if test="roleId != null and roleId != ''">
and r.id = #{roleId}
</if>
<if test="roleName != null and roleName != ''">
and r.role_name like concat('%',#{roleName},'%')
</if>
<if test="userId != null and userId != ''">
and ur.user_id = #{userId}
</if>
</select>
<select id="listUserRoleMenu" resultType="com.supervision.police.dto.user.RoleMenuDTO">
select ur.user_id,
ur.role_id,
rm.menu_id,
m.label,
m.label_code
from system_user_role_relation ur
left join system_role_menu_relation rm on ur.user_id = rm.id
left join system_menu m on rm.menu_id = m.id
where ur.user_id = #{userId}
</select>
</mapper>

@ -0,0 +1 @@
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgIc/Neoxk2aVlkKS4WyHJQ6NTWRMcaSh7dqAeH7gHKyegCgYIKoEcz1UBgi2hRANCAASSC2D8SWIwi6S2QmAzuiJXwtcTHcPsY/Epd4y6VOy0x5OZ4+hXdAq9KrXtRXJlbho1x8+0Rifr396CChxfYcAN

@ -0,0 +1 @@
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEkgtg/EliMIuktkJgM7oiV8LXEx3D7GPxKXeMulTstMeTmePoV3QKvSq17UVyZW4aNcfPtEYn69/eggocX2HADQ==
Loading…
Cancel
Save