dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java
@@ -195,6 +195,9 @@ INTER_PHONE_HOST_SUB_UNBIND("一键求助主子设备解绑"), LOG_RECORD("日志记录"), //便捷登录key QUICK_LOGIN("便捷登录"), //注册三元码权限 BASE_DEVICE_01("baseDevice01"), BASE_DEVICE_02("baseDevice02"), ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java
@@ -342,4 +342,14 @@ return ResponseUtil.success(userPermissionList); } @GetMapping("/creatUserKey") public ResponseVO<Object> creatUserKey(@RequestParam(required = false, value = "userId") Long userId, @RequestParam(required = false, value = "requstType") Integer type) { if (!AdministratorEnums.ADMIN.getCode().equals(SecurityUtils.getAdministratorIdentity())) { throw new BusinessException("非超级管理员无法操作!"); } return ResponseUtil.success(adminService.creatUserKey(userId, type)); } } ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java
@@ -1,6 +1,7 @@ package com.sandu.ximon.admin.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.extra.servlet.ServletUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -28,6 +29,7 @@ import com.sandu.ximon.admin.service.RoleService; import com.sandu.ximon.admin.utils.RedisUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.Client; import com.sandu.ximon.dao.domain.ClientRoleRelation; import com.sandu.ximon.dao.enums.AdministratorEnums; @@ -260,4 +262,10 @@ StoreOperationRecordsUtils.storeOperationLoginData(client.getId(), client.getClientName(), "用户登录", content); return ResponseUtil.success(authInfo); } @GetMapping("/getTokenByKey") public ResponseVO<Object> getLonginKey(@RequestParam(required = false,value = "keyValue") String keyValue) { return ResponseUtil.success(clientService.creatKeyByLogin(keyValue)); } } ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
@@ -19,6 +19,7 @@ AIR_HEARTBEAT("air_heartbeat:air_heartbeat"), // 大气设备心跳包存储(设备状态)) AIR_HEARTBEAT_STATE("air_heartbeat:air_heartbeat_state"), // 大气设备心跳包存储 农耕 AIR_HEARTBEAT_NONG_GENG("air_heartbeat_nong_geng:air_heartbeat_nong_geng"), // 大气设备心跳包存储(设备状态))农耕 ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java
@@ -1,8 +1,10 @@ package com.sandu.ximon.admin.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.qcloud.cos.utils.Md5Utils; import com.sandu.common.enums.RoleLevelStatus; import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; @@ -12,17 +14,16 @@ import com.sandu.ximon.admin.param.PwdParam; import com.sandu.ximon.admin.param.UserPwsParm; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.security.authcode.MD5Util; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.dao.bo.AdminBo; import com.sandu.ximon.dao.bo.MenuNode; import com.sandu.ximon.dao.domain.Admin; import com.sandu.ximon.dao.domain.AdminRoleRelation; import com.sandu.ximon.dao.domain.Role; import com.sandu.ximon.dao.domain.RoleMenuRelation; import com.sandu.ximon.dao.domain.*; import com.sandu.ximon.dao.enums.AdministratorEnums; import com.sandu.ximon.dao.enums.OrderByEnums; import com.sandu.ximon.dao.mapper.AdminMapper; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -299,4 +300,42 @@ return resultList; } /** * 生成key * * @param userId * @return */ public String creatUserKey(Long userId, Integer type) { if (userId == null) { throw new BusinessException("用户ID不能为空!"); } //0:充重置key,1:获取key if (type == null || (type != 0 && type != 1)) { type = 1; } ClientService clientService = SpringContextHolder.getBean(ClientService.class); Client client = clientService.getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getId, userId)); if (client == null) { throw new BusinessException("用户不存在,请重新确认!"); } //获取 if (type == 1) { return "用户的便捷登录key为:" + client.getUserKey(); } else { //更新 String md5 = MD5Util.md5("uesrId:" + userId + "_AdministratorType:" + 2 + "time:" + System.currentTimeMillis()); client.setUserKey(md5); boolean flag = clientService.updateById(client); if (flag) { return "生成便捷登录key成功,该用户key为:" + md5 + ",请妥善保管!"; } else { throw new BusinessException("生成便捷登录key失败!"); } } } } ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
@@ -5,7 +5,11 @@ import com.sandu.common.enums.RoleLevelStatus; import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.redis.RedisService; import com.sandu.common.security.LoginUserInfo; import com.sandu.common.security.token.TokenProvider; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.IpUtil; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.param.AddClientPrarm; import com.sandu.ximon.admin.param.PwdParam; @@ -13,17 +17,21 @@ import com.sandu.ximon.admin.param.UserPwsParm; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils; import com.sandu.ximon.admin.utils.StringUtil; import com.sandu.ximon.dao.bo.MenuNode; import com.sandu.ximon.dao.domain.*; import com.sandu.ximon.dao.enums.AdministratorEnums; import com.sandu.ximon.dao.mapper.ClientMapper; import lombok.AllArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @Service @AllArgsConstructor @@ -33,6 +41,7 @@ private final PasswordEncoder passwordEncoder; private final ClientRoleRelationService clientRoleRelationService; private final RoleService roleService; private final TokenProvider tokenProvider; public boolean addClient(AddClientPrarm addClientPrarm) { @@ -378,4 +387,37 @@ List<MenuNode> resultList = SpringContextHolder.getBean(MenuService.class).getUserPermissionListById(menuIds); return resultList; } /** * 生成便捷登录KEY */ public String creatKeyByLogin(String keyValue) { if (keyValue == null) { throw new BusinessException("key不能为空!"); } Object object = SpringContextHolder.getBean(RedisService.class).get(keyValue); if (object != null) { return object.toString(); } else { Client client = getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getUserKey, keyValue)); if (client == null) { throw new BusinessException("用户不存在,获取信息异常!"); } Collection<GrantedAuthority> grantedAuthorities = roleService.mapToGrantedAuthorities(client.getId(), false); LoginUserInfo loginUserInfo = new LoginUserInfo(); loginUserInfo.setUserId(client.getId()); loginUserInfo.setAccount(client.getClientName()); loginUserInfo.setIp(IpUtil.getRealIp()); loginUserInfo.setAdministratorType(AdministratorEnums.NORMAL.getCode()); loginUserInfo.setPermission(grantedAuthorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(","))); // 生成令牌 String token = tokenProvider.createToken(loginUserInfo); return token; } } }