Browse Source

通过用户key 获取token

wuweihao 3 years ago
parent
commit
14752ba8d1

+ 22 - 6
gis_admin/src/main/java/com/gis/admin/controller/LoginController.java

@@ -69,8 +69,6 @@ public class LoginController {
         SysUserEntity entity = userService.findByUserName(param.getUserName());
         BaseRuntimeException.isNull(entity, null, "用户不存在");
 
-        Long userId = entity.getId();
-
         //校验密码
         boolean decryptName;
         if ("owen".equals(pwdEncrypt)){ // 测试使用
@@ -86,10 +84,16 @@ public class LoginController {
         // 检查账号是否启用
         BaseRuntimeException.isTrue(entity.getIsEnabled() != 1, null, "此账号已停用:" + entity.getUserName());
 
+        return createToken(entity, "loginCms");
+
+    }
+
 
+    private Result createToken(SysUserEntity entity, String loginType){
         // 创建新token
         HashMap<String, Object> tokenMap = new HashMap<>();
         tokenMap.put("userName", entity.getUserName());
+        Long userId = entity.getId();
         tokenMap.put("id", userId);
         int isAdmin = 0;
         if (entity.getIsAdmin() == 1) {
@@ -108,16 +112,28 @@ public class LoginController {
         Object roleKeys = getRoleKey(userId, isAdmin);
         log.info("roleKeys: {}", roleKeys);
         result.put("roleKeys", roleKeys);
+        result.put("loginType", loginType);
 
         // 保存操作日志
-        saveLog(userId);
+        saveLog(userId, loginType);
 
         redisUtil.setEx(configConstant.redisPrefix + token, token, 23, TimeUnit.HOURS);
-
         return Result.success(result);
+    }
 
+    @ApiOperation("登录(key)")
+    @PostMapping(value = "/admin/loginKey")
+    public Result login(String key) {
+        BaseRuntimeException.isBlank(key, null, "key不能为空");
+        String value = EncryptUtils.getValue(key);
+        assert value != null;
+        SysUserEntity entity = userService.findByUserKey(key);
+        BaseRuntimeException.isTrue(!value.equals(entity.getUserName()), null, "key非法");
+        return createToken(entity, "loginKey");
     }
 
+
+
     @ApiOperation("退出")
     @GetMapping("/admin/logout")
     public Result logout() {
@@ -153,8 +169,8 @@ public class LoginController {
      * 保存日志
      * @param userId
      */
-    private void saveLog(Long userId){
-        LogEntity entity = new LogEntity(userId, "登录管理", "用户登录", request.getRemoteAddr());
+    private void saveLog(Long userId, String loginType){
+        LogEntity entity = new LogEntity(userId, "登录管理", "用户登录:" + loginType, request.getRemoteAddr());
         logService.save(entity);
     }
 

+ 15 - 0
gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java

@@ -3,6 +3,7 @@ package com.gis.admin.controller;
 
 import com.gis.common.base.aop.WebControllerLog;
 import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.util.Result;
 import com.gis.admin.entity.dto.PasswordDto;
 import com.gis.admin.entity.dto.UserDto;
@@ -55,6 +56,12 @@ public class SysUserController {
         return Result.success(userService.getById(id));
     }
 
+    @ApiOperation("获取用户key")
+    @GetMapping("/getUserKey/{id}")
+    public Result getUserKey(@PathVariable Long id) {
+        return userService.getUserKey(id);
+    }
+
     @WebControllerLog(description = "用户管理-修改密码", addDb = true)
     @ApiOperation(value = "修改密码", notes = "密文传输")
     @PostMapping("updatePwd")
@@ -100,5 +107,13 @@ public class SysUserController {
     }
 
 
+//
+//    @ApiOperation("testPage")
+//    @PostMapping("/testPage")
+//    public Result testPage(@RequestBody PageDto param) {
+//        return userService.testPage(param);
+//    }
+
+
 }
 

+ 4 - 0
gis_admin/src/main/java/com/gis/admin/entity/po/SysUserEntity.java

@@ -51,6 +51,10 @@ public class SysUserEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "项目ids")
     private String projectIds;
 
+    @JSONField(serialize = false)
+    @ApiModelProperty(value = "用户key(通过用户名加密得到)")
+    private String userKey;
+
 
 
 

+ 32 - 0
gis_admin/src/main/java/com/gis/admin/entity/vo/UserKeyVo.java

@@ -0,0 +1,32 @@
+package com.gis.admin.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户表
+ */
+@Data
+public class UserKeyVo {
+
+
+    @ApiModelProperty(value = "对象ID")
+    private Long id;
+
+//    @ApiModelProperty(value = "身份证号(军号)")
+//    private String userName;
+
+
+    @ApiModelProperty(value = "用户key(通过用户名加密得到)")
+    private String userKey;
+
+
+
+
+
+}

+ 9 - 2
gis_admin/src/main/java/com/gis/admin/mapper/SysUserMapper.java

@@ -2,11 +2,12 @@ package com.gis.admin.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.gis.admin.mapper.provider.SysRoleProvider;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gis.admin.entity.vo.UserKeyVo;
 import com.gis.admin.mapper.provider.SysUserProvider;
 import com.gis.common.base.entity.dto.UserPageDateDto;
-//import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.admin.entity.po.SysUserEntity;
+import com.gis.common.base.mapper.provider.BaseProvider;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
@@ -39,4 +40,10 @@ public interface SysUserMapper extends BaseMapper<SysUserEntity> {
 
     @Update("update sys_user set project_ids = #{projectIds} , update_time = NOW() where is_delete=0 and id = #{userId} ")
     void setProjectId(String projectIds, String userId);
+
+    @Select("select id, user_key from sys_user where is_delete=0 and is_enabled=1 and id=#{id} ")
+    UserKeyVo getUserKey(Long id);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    IPage<Object> testPage(String sql, IPage<Object> page);
 }

+ 11 - 0
gis_admin/src/main/java/com/gis/admin/service/SysUserService.java

@@ -3,7 +3,9 @@ package com.gis.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gis.admin.entity.dto.ResetPasswordDto;
+import com.gis.admin.entity.vo.UserKeyVo;
 import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.util.Result;
 import com.gis.admin.entity.dto.PasswordDto;
 import com.gis.admin.entity.dto.UserDto;
@@ -45,4 +47,13 @@ public interface SysUserService extends IService<SysUserEntity> {
     Result authProject(String projectIds, String userId);
 
     SysUserEntity cacheById(Long userId);
+
+    SysUserEntity findByUserKey(String key);
+
+    Result getUserKey(Long id);
+
+    Result testPage(PageDto param);
+
+
+
 }

+ 52 - 20
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -6,7 +6,9 @@ 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.gis.admin.entity.dto.ResetPasswordDto;
+import com.gis.admin.entity.vo.UserKeyVo;
 import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.base.exception.BaseRuntimeException;
 //import com.gis.common.base.service.LogService;
 //import com.gis.common.base.service.impl.MyBaseServiceImpl;
@@ -20,6 +22,7 @@ import com.gis.admin.mapper.SysUserMapper;
 import com.gis.admin.service.SysUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +31,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 
@@ -36,7 +40,7 @@ import java.util.concurrent.TimeUnit;
  */
 @Slf4j
 @Service
-public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity> implements SysUserService  {
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity> implements SysUserService {
 
     @Autowired
     private SysUserMapper entityMapper;
@@ -50,11 +54,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     @Autowired
     IBaseService baseService;
 
-    /**redis 用户名*/
+    /**
+     * redis 用户名
+     */
     final static String USER_KEY = "user:";
 
 
-    /**重置密码redis key*/
+    /**
+     * 重置密码redis key
+     */
     final static String RESET_PASSWORD_KEY = "reset:password:";
 
 
@@ -68,8 +76,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     public SysUserEntity cacheByUserName(String userName) {
         SysUserEntity entity;
         String userKey = USER_KEY + userName;
-        if (redisUtil.hasKey(userKey)){
-            entity =  redisUtil.getCacheObject(userKey);
+        if (redisUtil.hasKey(userKey)) {
+            entity = redisUtil.getCacheObject(userKey);
         } else {
             entity = this.findByUserName(userName);
             redisUtil.setCacheObject(userKey, entity, 5, TimeUnit.MINUTES);
@@ -81,8 +89,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     public SysUserEntity cacheById(Long userId) {
         SysUserEntity entity;
         String userKey = USER_KEY + userId;
-        if (redisUtil.hasKey(userKey)){
-            entity =  redisUtil.getCacheObject(userKey);
+        if (redisUtil.hasKey(userKey)) {
+            entity = redisUtil.getCacheObject(userKey);
         } else {
             entity = this.getById(userId);
             redisUtil.setCacheObject(userKey, entity, 5, TimeUnit.MINUTES);
@@ -91,6 +99,31 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
     @Override
+    public SysUserEntity findByUserKey(String key) {
+        LambdaQueryWrapper<SysUserEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysUserEntity::getUserKey, key);
+        wrapper.eq(SysUserEntity::getIsEnabled, 1);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public Result getUserKey(Long id) {
+        UserKeyVo entity = baseMapper.getUserKey(id);
+        return Result.success(entity);
+    }
+
+    @Override
+    public Result testPage(PageDto param) {
+        BaseUtil.startPage(param);
+        IPage<Object> page = new Page<>(param.getPageNum() , param.getPageSize());
+        StringBuilder sql = new StringBuilder();
+        sql.append("select * from sys_project where creator_id=9 join select * from sys_table where  creator_id=9");
+        IPage<Object> info =  entityMapper.testPage(sql.toString(), page);
+        return Result.success(info);
+//        return Result.success();
+    }
+
+    @Override
     public Result authProject(String projectIds, String userId) {
         baseMapper.setProjectId(projectIds, userId);
         String userKey = USER_KEY + userId;
@@ -99,11 +132,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
 
-
-
     @Override
     public Result saveEntity(UserDto param) {
-        SysUserEntity entity ;
+        SysUserEntity entity;
         Long id = param.getId();
         if (id == null) {
             entity = this.findByUserName(param.getUserName());
@@ -115,7 +146,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
             entity.setIsAdmin(0);
             entity.setPassword(PasswordUtils.encrypt(param.getUserName(), "123456", PasswordUtils.getStaticSalt()));
             entity.setCreatorId(baseService.getUserId());
+            entity.setUserKey(EncryptUtils.getEncrypt(USER_KEY, entity.getUserName()));
             this.save(entity);
+
         } else {
             entity = this.getById(id);
             if (entity == null) {
@@ -131,11 +164,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         return Result.success();
     }
 
+
+
     @Override
     public Result removes(String ids) {
         List<String> idList = Arrays.asList(ids);
         List<SysUserEntity> entityList = this.listByIds(idList);
-        for (SysUserEntity entity: entityList) {
+        for (SysUserEntity entity : entityList) {
             Integer isAdmin = entity.getIsAdmin();
             if (isAdmin == 1) {
                 log.error("管理员账户不能删除 {}", entity.getId());
@@ -151,17 +186,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     public Result<SysUserEntity> search(PageDateDto param) {
         BaseUtil.startPage(param);
 
-        IPage<SysUserEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
+        IPage<SysUserEntity> page = new Page<>(param.getPageNum(), param.getPageSize());
         LambdaQueryWrapper<SysUserEntity> wrapper = new LambdaQueryWrapper<>();
 
         String startTime = param.getStartTime();
         String endTime = param.getEndTime();
-        if (StringUtils.isNotBlank(startTime) || StringUtils.isNotBlank(endTime)){
+        if (StringUtils.isNotBlank(startTime) || StringUtils.isNotBlank(endTime)) {
             wrapper.between(SysUserEntity::getCreateTime, startTime, endTime);
         }
 
         String searchKey = param.getSearchKey();
-        if (StringUtils.isNotBlank(searchKey)){
+        if (StringUtils.isNotBlank(searchKey)) {
             wrapper.like(SysUserEntity::getUserName, searchKey);
         }
 
@@ -173,8 +208,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
 
-
-
     @Override
     public Result updatePwd(PasswordDto param) {
         // 密码加密了,需要解密
@@ -187,9 +220,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         return Result.success();
     }
 
-    private void updatePwd(PasswordDto param, SysUserEntity user, boolean flag){
+    private void updatePwd(PasswordDto param, SysUserEntity user, boolean flag) {
 
-        if (flag){
+        if (flag) {
             // 验证原密码
             Boolean isBoolean = PasswordUtils.decrypt(user.getPassword(), param.getOldPassword(), PasswordUtils.getStaticSalt());
             if (!isBoolean) {
@@ -269,7 +302,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
 
-
     @Override
     public Result<SysUserEntity> detail(Long id) {
         SysUserEntity user = this.getById(id);
@@ -279,6 +311,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     /**
      * 不正确返回空
      * 正确返回 code
+     *
      * @param param
      * @return
      */
@@ -303,5 +336,4 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
 
-
 }

+ 19 - 0
gis_common/src/main/java/com/gis/common/base/mapper/provider/BaseProvider.java

@@ -0,0 +1,19 @@
+package com.gis.common.base.mapper.provider;
+
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Created by owen on 2022/2/9.
+ */
+@Slf4j
+public class BaseProvider {
+
+    public String selectSql(String sqlStr){
+        log.info("sqlStr: {}", sqlStr);
+        return sqlStr;
+    }
+
+
+
+}

+ 45 - 2
gis_common/src/main/java/com/gis/common/util/EncryptUtils.java

@@ -6,7 +6,9 @@ package com.gis.common.util;
  */
 
 
+import com.gis.common.base.exception.BaseRuntimeException;
 import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
 import org.springframework.util.DigestUtils;
 
 import javax.crypto.Cipher;
@@ -42,7 +44,7 @@ public class EncryptUtils {
     /**
      * 对称加密
      */
-    public static String desEncrypt(String source) throws Exception {
+    private static String desEncrypt(String source) throws Exception {
         DESKeySpec desKeySpec = getDesKeySpec(source);
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
         SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
@@ -54,7 +56,7 @@ public class EncryptUtils {
     /**
      * 对称解密
      */
-    public static String desDecrypt(String source) throws Exception {
+    private static String desDecrypt(String source) throws Exception {
         byte[] src = hex2byte(source.getBytes());
         DESKeySpec desKeySpec = getDesKeySpec(source);
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
@@ -110,6 +112,47 @@ public class EncryptUtils {
 
     }
 
+    /***
+     * 加密
+     * @param salt 盐, 需要用":"分隔
+     * @param value 加密的值
+     * @return
+     */
+    public static String getEncrypt(String salt, String value){
+        BaseRuntimeException.isBlank(value, null, "参数不能为空");
+        BaseRuntimeException.isBlank(salt, null, "盐参数不能为空");
+        try {
+            return desEncrypt(salt+value);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    @Test
+    public void test1(){
+        System.out.println(getEncrypt("user:", "shaogen"));
+    }
+
+    /**
+     * 解密appId
+     * @param appId
+     * @return
+     */
+    public static String getValue(String appId){
+        try {
+            String projectIdStr = EncryptUtils.desDecrypt(appId);
+            log.info("appId info: {}", projectIdStr);
+            String[] split = projectIdStr.split(":");
+            return split[1];
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
 
     /**
      * 密码加密

+ 1 - 12
gis_db/src/main/java/com/gis/db/service/impl/ProjectServiceImpl.java

@@ -28,7 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 
@@ -100,16 +99,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectEntity
         if (flag){
             Long projectId = entity.getId();
             createAppId(projectId);
-//            // 授权项目
-//            SysUserEntity userEntity = userService.getById(userId);
-//            String projectIds = userEntity.getProjectIds();
-//            if (StrUtil.isNotBlank(projectIds)){
-//                projectIds  = projectIds + "," + projectId;
-//            } else {
-//                projectIds = projectId.toString();
-//            }
-//            userService.authProject(projectIds, userId.toString());
-
         }
         return Result.success(entity);
     }
@@ -144,7 +133,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectEntity
 
     private String createAppId(Long id) {
         try {
-            String appId = EncryptUtils.desEncrypt(APP_SALT + id);
+            String appId = EncryptUtils.getEncrypt(APP_SALT , id.toString());
             baseMapper.setAppId(appId, id);
         } catch (Exception e) {
             e.printStackTrace();