Browse Source

feat: support Independence sso

master
wangxiang 1 year ago
parent
commit
d2f0be8001
  1. 29
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/IdentityProviderEnum.java
  2. 20
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java
  3. 5
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/ISsoUserService.java
  4. 6
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java
  5. 13
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/SsoUserServiceImpl.java

29
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;
/**
*<p>
* 登陆身份提供商
*</p>
*
* @Author: wangxiang4
* @Since: 2024/1/3
*/
@Getter
@RequiredArgsConstructor
public enum IdentityProviderEnum {
ROOT("root", "超级管理员"),
CUSTOMER("customer", "普通用户");
private final String value;
private final String description;
}

20
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.constant.AppConstants;
import com.cloud.kicc.common.core.exception.CheckedException; import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.data.entity.KiccUser; 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.log.annotation.SysLog;
import com.cloud.kicc.common.security.annotation.Inner; import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService; import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService;
import com.cloud.kicc.system.api.entity.*; 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.enums.UserTypeEnum;
import com.cloud.kicc.system.api.vo.ResultVo; import com.cloud.kicc.system.api.vo.ResultVo;
import com.cloud.kicc.system.service.*; import com.cloud.kicc.system.service.*;
@ -27,6 +29,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
@ -114,6 +117,8 @@ public class UserController {
@GetMapping("/oneClickAccess/{casUserId:\\w+}") @GetMapping("/oneClickAccess/{casUserId:\\w+}")
public R oneClickAccess(@PathVariable String casUserId) { public R oneClickAccess(@PathVariable String casUserId) {
if (ObjectUtil.isNotEmpty(iSsoUserService.getById(casUserId)) && ObjectUtil.isEmpty(userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getCasUserId, casUserId)))) { if (ObjectUtil.isNotEmpty(iSsoUserService.getById(casUserId)) && ObjectUtil.isEmpty(userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getCasUserId, casUserId)))) {
SsoUser kicsSsoUser = iSsoUserService.getKicsSsoUser(casUserId);
Optional.ofNullable(kicsSsoUser).orElseThrow(() -> new CheckedException("当前casUserId无效请重新检查配置!"));
String initDeptId = configService.getValueByKey("app.init.deptId"); String initDeptId = configService.getValueByKey("app.init.deptId");
Dept dept = deptService.getById(initDeptId); Dept dept = deptService.getById(initDeptId);
Optional.ofNullable(dept).orElseThrow(() -> new CheckedException("当前部门无效请重新在参数管理中配置!")); Optional.ofNullable(dept).orElseThrow(() -> new CheckedException("当前部门无效请重新在参数管理中配置!"));
@ -123,6 +128,21 @@ public class UserController {
String initUserType = configService.getValueByKey("app.init.normal.userType"); String initUserType = configService.getValueByKey("app.init.normal.userType");
String initTenantId = configService.getValueByKey("app.init.tenantId"); String initTenantId = configService.getValueByKey("app.init.tenantId");
String initRoleIds = configService.getValueByKey("app.init.roleIds"); 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 user = new User();
user.setCasUserId(casUserId); user.setCasUserId(casUserId);

5
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<SsoUser> {
*/ */
List<SsoUser> selectBindSsoUserList(); List<SsoUser> selectBindSsoUserList();
/**
* 查询kics的sso用户
*/
SsoUser getKicsSsoUser(String casUserId);
} }

6
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/AppServiceImpl.java

@ -3,10 +3,8 @@ 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.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.javaer.aliyun.sms.SmsClient; import cn.javaer.aliyun.sms.SmsClient;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.CacheConstants; 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.core.exception.ValidateCodeException;
import com.cloud.kicc.common.data.entity.KiccUser; import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.data.entity.SsoUser; 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.commonbiz.api.feign.RemotePushConcernFanService;
import com.cloud.kicc.system.api.entity.Dept; import com.cloud.kicc.system.api.entity.Dept;
import com.cloud.kicc.system.api.entity.User; 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.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -74,7 +72,7 @@ public class AppServiceImpl implements AppService {
return R.ok(Boolean.TRUE); return R.ok(Boolean.TRUE);
} }
@DSTransactional @Transactional(rollbackFor = Exception.class)
public SsoUser phoneRegister(String phone, String captcha, String identityProvider) { public SsoUser phoneRegister(String phone, String captcha, String identityProvider) {
// 设置不区分大小写,全部以小写验证 // 设置不区分大小写,全部以小写验证
Validator.validateMobile(phone, "手机号码不合法"); Validator.validateMobile(phone, "手机号码不合法");

13
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; package com.cloud.kicc.system.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.common.data.entity.KiccUser; 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 com.cloud.kicc.system.service.UserService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
@ -25,13 +25,12 @@ import java.util.List;
*/ */
@Service @Service
@AllArgsConstructor @AllArgsConstructor
@DS("mysql_kics")
public class SsoUserServiceImpl extends ServiceImpl<SsoUserMapper, SsoUser> implements ISsoUserService { public class SsoUserServiceImpl extends ServiceImpl<SsoUserMapper, SsoUser> implements ISsoUserService {
private final UserService userService; private final UserService userService;
@Override @Override
@DSTransactional @Transactional(rollbackFor = Exception.class)
public void updateSsoUserAndExUser(KiccUser kiccUser) { public void updateSsoUserAndExUser(KiccUser kiccUser) {
// 修改SSO用户信息 // 修改SSO用户信息
SsoUser ssoUser = new SsoUser() SsoUser ssoUser = new SsoUser()
@ -58,9 +57,15 @@ public class SsoUserServiceImpl extends ServiceImpl<SsoUserMapper, SsoUser> impl
} }
@Override @Override
@DS("master")
public List<SsoUser> selectBindSsoUserList() { public List<SsoUser> selectBindSsoUserList() {
return baseMapper.selectBindSsoUserList(); return baseMapper.selectBindSsoUserList();
} }
@Override
@DS("mysql_kics")
public SsoUser getKicsSsoUser(String casUserId) {
return super.getById(casUserId);
}
} }

Loading…
Cancel
Save