From d2fcdc648517fc1fc00e28d36c4b954c54c52c8c Mon Sep 17 00:00:00 2001 From: zkh <1065691191@qq.com> Date: Mon, 1 Sep 2025 19:38:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=B4=E6=8E=A5=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AccessUserController.java | 10 +++ .../accessuser/service/AccessUserService.java | 2 + .../service/impl/AccessUserServiceImpl.java | 84 ++++++++++++++++++++++ src/main/resources/bootstrap.yml | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java b/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java index 330a3aa..8283e0b 100644 --- a/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java +++ b/src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java @@ -99,6 +99,16 @@ public class AccessUserController extends GaeaBaseController wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AccessUser::getLoginName, loginName); + AccessUser accessUser = accessUserMapper.selectOne(wrapper); + if (null == accessUser) { + //没有用户,创建一个用户,同时赋予默认角色 + accessUser = new AccessUser(); + accessUser.setLoginName(loginName); + accessUser.setRealName(loginName); + accessUser.setEnableFlag(EnableFlagEnum.ENABLE.getCodeValue()); + accessUser.setDeleteFlag(DeleteFlagEnum.UNDELETED.getCodeValue()); + accessUser.setCreateTime(new Date()); + accessUser.setCreateBy(BusinessConstant.USER_ADMIN); + accessUser.setUpdateTime(new Date()); + accessUser.setUpdateBy(BusinessConstant.USER_ADMIN); + accessUser.setVersion(1); + insert(accessUser); + //创建用户角色 + AccessUserDto accessUserDto = new AccessUserDto(); + accessUserDto.setLoginName(loginName); + //默认是报表角色 + accessUserDto.setRoleCodeList(Arrays.asList("excel-report")); + saveRoleTree(accessUserDto); + } + // 2.密码错误 + if (!accessUser.getPassword().equals(MD5Util.encrypt(password))) { + throw BusinessExceptionBuilder.build(ResponseCode.USER_PASSWORD_ERROR); + } + + // 3.如果该用户登录未过期,这里允许一个用户在多个终端登录 + String tokenKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_TOKEN, loginName); + String token = ""; + GaeaUserDto gaeaUser = new GaeaUserDto(); + if (cacheHelper.exist(tokenKey)) { + token = cacheHelper.stringGet(tokenKey); + } else { + // 生成用户token + String uuid = GaeaUtils.UUID(); + token = jwtBean.createToken(loginName, uuid, 0, GaeaConstant.TENANT_CODE); + cacheHelper.stringSetExpire(tokenKey, token, 3600); + } + + // 4.读取用户最新人权限主信息 + String userKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_USER, loginName); + + //为了兼容底层其他数据库,不再写自定义sql +// List authorities = accessUserMapper.queryAuthoritiesByLoginName(loginName); + + //当前用户的roleCode集合 + LambdaQueryWrapper accessUserWrapper = Wrappers.lambdaQuery(); + accessUserWrapper.select(AccessUserRole::getRoleCode); + accessUserWrapper.eq(AccessUserRole::getLoginName, loginName); + List accessUserRoles = accessUserRoleMapper.selectList(accessUserWrapper); + Set roleCodeSet = accessUserRoles.stream().map(AccessUserRole::getRoleCode).collect(Collectors.toSet()); + if (roleCodeSet.size() < 1) { + gaeaUser.setAuthorities(new ArrayList<>()); + }else { + LambdaQueryWrapper accessRoleAuthorityWrapper = Wrappers.lambdaQuery(); + accessRoleAuthorityWrapper.select(AccessRoleAuthority::getTarget, AccessRoleAuthority::getAction); + accessRoleAuthorityWrapper.in(AccessRoleAuthority::getRoleCode, roleCodeSet); + List accessRoleAuthorities = accessRoleAuthorityMapper.selectList(accessRoleAuthorityWrapper); + List authorities = accessRoleAuthorities.stream() + .map(accessRoleAuthority -> accessRoleAuthority.getTarget().concat(":").concat(accessRoleAuthority.getAction())).distinct().collect(Collectors.toList()); + gaeaUser.setAuthorities(authorities); + } + + gaeaUser.setLoginName(loginName); + gaeaUser.setRealName(accessUser.getRealName()); + gaeaUser.setToken(token); + + String gaeaUserStr = JSONObject.toJSONString(gaeaUser); + cacheHelper.stringSetExpire(userKey, gaeaUserStr, 3600); + + return gaeaUser; + } + /** * 修改密码 * diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 07a65a0..ec334bb 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -132,7 +132,7 @@ logging: # 本应用自定义参数 customer: # 跳过token验证和权限验证的url清单 - skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs, /reportExcel/exportExcel + skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs, /reportExcel/exportExcel,/accessUser/directLogin file: #导入导出临时文件夹 默认.代表当前目录,拼接/tmp_zip/目录 tmpPath: .