From d2f0be80018e8f62e9851e3e01cd9c74a50e6a92 Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Wed, 3 Jan 2024 17:58:40 +0800 Subject: [PATCH] feat: support Independence sso --- .../api/enums/IdentityProviderEnum.java | 29 +++++++++++++++++++ .../system/controller/UserController.java | 20 +++++++++++++ .../kicc/system/service/ISsoUserService.java | 5 ++++ .../system/service/impl/AppServiceImpl.java | 8 ++--- .../service/impl/SsoUserServiceImpl.java | 13 ++++++--- 5 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/IdentityProviderEnum.java diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/IdentityProviderEnum.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/IdentityProviderEnum.java new file mode 100644 index 00000000..691a7289 --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/IdentityProviderEnum.java @@ -0,0 +1,29 @@ +package com.cloud.kicc.system.api.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + *

+ * 登陆身份提供商 + *

+ * + * @Author: wangxiang4 + * @Since: 2024/1/3 + */ +@Getter +@RequiredArgsConstructor +public enum IdentityProviderEnum { + + + ROOT("root", "超级管理员"), + + CUSTOMER("customer", "普通用户"); + + + private final String value; + + + private final String description; + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java index 054a3cb4..d22e2f9f 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java @@ -13,11 +13,13 @@ import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.core.exception.CheckedException; import com.cloud.kicc.common.data.entity.KiccUser; +import com.cloud.kicc.common.data.entity.SsoUser; import com.cloud.kicc.common.log.annotation.SysLog; import com.cloud.kicc.common.security.annotation.Inner; import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService; import com.cloud.kicc.system.api.entity.*; +import com.cloud.kicc.system.api.enums.IdentityProviderEnum; import com.cloud.kicc.system.api.enums.UserTypeEnum; import com.cloud.kicc.system.api.vo.ResultVo; import com.cloud.kicc.system.service.*; @@ -27,6 +29,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; import java.util.*; @@ -114,6 +117,8 @@ public class UserController { @GetMapping("/oneClickAccess/{casUserId:\\w+}") public R oneClickAccess(@PathVariable String casUserId) { if (ObjectUtil.isNotEmpty(iSsoUserService.getById(casUserId)) && ObjectUtil.isEmpty(userService.getOne(Wrappers.lambdaQuery().eq(User::getCasUserId, casUserId)))) { + SsoUser kicsSsoUser = iSsoUserService.getKicsSsoUser(casUserId); + Optional.ofNullable(kicsSsoUser).orElseThrow(() -> new CheckedException("当前casUserId无效请重新检查配置!")); String initDeptId = configService.getValueByKey("app.init.deptId"); Dept dept = deptService.getById(initDeptId); Optional.ofNullable(dept).orElseThrow(() -> new CheckedException("当前部门无效请重新在参数管理中配置!")); @@ -123,6 +128,21 @@ public class UserController { String initUserType = configService.getValueByKey("app.init.normal.userType"); String initTenantId = configService.getValueByKey("app.init.tenantId"); String initRoleIds = configService.getValueByKey("app.init.roleIds"); + String initPassword = configService.getValueByKey("appid.password"); + + // 修改扩展用户信息 + SsoUser ssoUser = new SsoUser(); + ssoUser.setUserName(kicsSsoUser.getUserName()); + ssoUser.setNickName(kicsSsoUser.getNickName()); + ssoUser.setPassword(new BCryptPasswordEncoder().encode(initPassword)); + ssoUser.setEmail(kicsSsoUser.getEmail()); + ssoUser.setPhone(kicsSsoUser.getPhone()); + ssoUser.setIdentityProvider(IdentityProviderEnum.CUSTOMER.getValue()); + ssoUser.setAvatar(kiccUser.getAvatar()); + ssoUser.setTenantId(initTenantId); + ssoUser.setCreateById(kiccUser.getUsername()); + ssoUser.setCreateByName(kiccUser.getId()); + iSsoUserService.save(ssoUser); User user = new User(); user.setCasUserId(casUserId); diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/ISsoUserService.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/ISsoUserService.java index 47833ab2..8699165a 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/ISsoUserService.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/ISsoUserService.java @@ -28,4 +28,9 @@ public interface ISsoUserService extends IService { */ List selectBindSsoUserList(); + /** + * 查询kics的sso用户 + */ + SsoUser getKicsSsoUser(String casUserId); + } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java index 27d1efc8..246acd05 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java @@ -1,12 +1,10 @@ package com.cloud.kicc.system.service.impl; -import cn.hutool.core.lang.Validator; +import cn.hutool.core.lang.Validator; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.CharSequenceUtil; -import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.javaer.aliyun.sms.SmsClient; -import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.CacheConstants; @@ -15,7 +13,6 @@ import com.cloud.kicc.common.core.exception.CheckedException; import com.cloud.kicc.common.core.exception.ValidateCodeException; import com.cloud.kicc.common.data.entity.KiccUser; import com.cloud.kicc.common.data.entity.SsoUser; -import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService; import com.cloud.kicc.system.api.entity.Dept; import com.cloud.kicc.system.api.entity.User; @@ -27,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -74,7 +72,7 @@ public class AppServiceImpl implements AppService { return R.ok(Boolean.TRUE); } - @DSTransactional + @Transactional(rollbackFor = Exception.class) public SsoUser phoneRegister(String phone, String captcha, String identityProvider) { // 设置不区分大小写,全部以小写验证 Validator.validateMobile(phone, "手机号码不合法"); diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/SsoUserServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/SsoUserServiceImpl.java index 66640e8b..08607318 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/SsoUserServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/SsoUserServiceImpl.java @@ -1,7 +1,6 @@ package com.cloud.kicc.system.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; -import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cloud.kicc.common.data.entity.KiccUser; @@ -12,6 +11,7 @@ import com.cloud.kicc.system.service.ISsoUserService; import com.cloud.kicc.system.service.UserService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -25,13 +25,12 @@ import java.util.List; */ @Service @AllArgsConstructor -@DS("mysql_kics") public class SsoUserServiceImpl extends ServiceImpl implements ISsoUserService { private final UserService userService; @Override - @DSTransactional + @Transactional(rollbackFor = Exception.class) public void updateSsoUserAndExUser(KiccUser kiccUser) { // 修改SSO用户信息 SsoUser ssoUser = new SsoUser() @@ -58,9 +57,15 @@ public class SsoUserServiceImpl extends ServiceImpl impl } @Override - @DS("master") public List selectBindSsoUserList() { return baseMapper.selectBindSsoUserList(); } + @Override + @DS("mysql_kics") + public SsoUser getKicsSsoUser(String casUserId) { + return super.getById(casUserId); + } + + }