2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-07-28 254dc4d9b8d903246483297ed0799290f856f0de
便捷登录
已修改6个文件
111 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AdminController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/ClientController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdminService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
        }
    }
}