From d97a224bcc6b3c19f27ff44bc44575be1fde7852 Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Thu, 12 Oct 2023 02:18:15 +0800 Subject: [PATCH] chore: Support multi login --- .../auth/provider/UserProviderTemplateImpl.java | 14 ++++---------- .../cloud/kicc/common/data/entity/CasUser.java | 6 +++++- .../CustomAppAuthenticationProvider.java | 2 +- .../provider/KiccDaoAuthenticationProvider.java | 2 +- .../security/service/KiccUserDetailsService.java | 1 + .../kicc/system/api/feign/RemoteAppService.java | 8 +++++--- .../kicc/system/api/feign/RemoteDictService.java | 5 +++-- .../system/api/feign/RemoteSsoUserService.java | 8 ++++++-- .../kicc/system/controller/AppController.java | 16 ++++++++-------- .../system/controller/DictDataController.java | 15 ++++++--------- .../system/controller/SsoUserController.java | 8 +++++--- 11 files changed, 45 insertions(+), 40 deletions(-) diff --git a/kicc-auth/src/main/java/com/cloud/kicc/auth/provider/UserProviderTemplateImpl.java b/kicc-auth/src/main/java/com/cloud/kicc/auth/provider/UserProviderTemplateImpl.java index 56f55231..ad490dd0 100644 --- a/kicc-auth/src/main/java/com/cloud/kicc/auth/provider/UserProviderTemplateImpl.java +++ b/kicc-auth/src/main/java/com/cloud/kicc/auth/provider/UserProviderTemplateImpl.java @@ -24,11 +24,8 @@ public class UserProviderTemplateImpl implements UserProviderTemplate @Override public SsoUser selectByUserNameAndParam(String userName, Map parameters) { - SsoUser ssoUser = new SsoUser() - .setUserName(userName) - .setIdentityProvider(parameters.get("identityProvider")); - ssoUser.setTenantId(parameters.get("tenantId")); - R result = remoteSsoUserService.selectByUserNameAndSsoUser(ssoUser); + parameters.put("username", userName); + R result = remoteSsoUserService.selectByUserNameAndSsoUser(parameters); if (result.getCode() != R.SUCCESS) { throw new SecurityCheckedException(ObjectUtil.defaultIfBlank(result.getMsg(), "SecurityProviderTemplateImpl invoke failed!")); } @@ -37,11 +34,8 @@ public class UserProviderTemplateImpl implements UserProviderTemplate @Override public SsoUser selectByPhoneAndParam(String phone, Map parameters) { - SsoUser ssoUser = new SsoUser() - .setPhone(phone) - .setIdentityProvider(parameters.get("identityProvider")); - ssoUser.setTenantId(parameters.get("tenantId")); - R result = remoteAppService.selectByPhoneAndSsoUser(ssoUser); + parameters.put("phone", phone); + R result = remoteAppService.selectByPhoneAndSsoUser(parameters); if (result.getCode() != R.SUCCESS) { throw new SecurityCheckedException(ObjectUtil.defaultIfBlank(result.getMsg(), "SecurityProviderTemplateImpl invoke failed!")); } diff --git a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/CasUser.java b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/CasUser.java index 845b25cc..a480c095 100644 --- a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/CasUser.java +++ b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/CasUser.java @@ -45,7 +45,7 @@ public class CasUser extends User { /** idp身份提供商 */ private String identityProvider; - + /** 头像地址 */ private String avatar; @@ -109,6 +109,7 @@ public class CasUser extends User { String email, String phone, String sex, + String identityProvider, String avatar, String loginIp, LocalDateTime loginTime, @@ -126,6 +127,7 @@ public class CasUser extends User { this.email = email; this.phone = phone; this.sex = sex; + this.identityProvider = identityProvider; this.avatar = avatar; this.loginIp = loginIp; this.loginTime = loginTime; @@ -151,6 +153,7 @@ public class CasUser extends User { String email, String phone, String sex, + String identityProvider, String avatar, String loginIp, LocalDateTime loginTime, @@ -170,6 +173,7 @@ public class CasUser extends User { this.email = email; this.phone = phone; this.sex = sex; + this.identityProvider = identityProvider; this.avatar = avatar; this.loginIp = loginIp; this.loginTime = loginTime; diff --git a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/CustomAppAuthenticationProvider.java b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/CustomAppAuthenticationProvider.java index c174ff7a..f4804d59 100644 --- a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/CustomAppAuthenticationProvider.java +++ b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/CustomAppAuthenticationProvider.java @@ -82,7 +82,7 @@ public class CustomAppAuthenticationProvider extends AbstractUserDetailsAuthenti // 手机号 String phone = authentication.getName(); - UserDetails userDetails = optional.get().loadUserByParam(phone, (LinkedHashMap)authentication.getCredentials()); + UserDetails userDetails = optional.get().loadUserByParam(phone, (LinkedHashMap)authentication.getDetails()); // userDetails 校验 preAuthenticationChecks.check(userDetails); diff --git a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java index b7ef7116..b45a228d 100644 --- a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java +++ b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/grant/provider/KiccDaoAuthenticationProvider.java @@ -102,7 +102,7 @@ public class KiccDaoAuthenticationProvider extends AbstractUserDetailsAuthentica } try { - UserDetails loadedUser = optional.get().loadUserByParam(username, (LinkedHashMap)authentication.getCredentials()); + UserDetails loadedUser = optional.get().loadUserByParam(username, (LinkedHashMap)authentication.getDetails()); if (loadedUser == null) { throw new InternalAuthenticationServiceException( "UserDetailsService returned null, which is an interface contract violation"); diff --git a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java index 07a6f980..01432592 100644 --- a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java +++ b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/service/KiccUserDetailsService.java @@ -70,6 +70,7 @@ public interface KiccUserDetailsService extends Ordered { user.getEmail(), user.getPhone(), user.getSex(), + user.getIdentityProvider(), user.getAvatar(), user.getLoginIp(), user.getLoginTime(), diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteAppService.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteAppService.java index 20c40d47..5db78d86 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteAppService.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteAppService.java @@ -7,7 +7,9 @@ import com.cloud.kicc.common.core.constant.ServiceNameConstants; import com.cloud.kicc.common.data.entity.SsoUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Map; /** *

@@ -22,10 +24,10 @@ public interface RemoteAppService { /** * 通过手机号码查询用户 - * @param ssoUser sso用户 + * @param param 参数 * @return R */ @GetMapping(value = AppConstants.APP_SYSTEM + "/app/selectByPhoneAndSsoUser", headers = SecurityConstants.HEADER_FROM_IN) - R selectByPhoneAndSsoUser(SsoUser ssoUser); + R selectByPhoneAndSsoUser(@RequestParam("param") Map param); } diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java index 307959e0..18104951 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteDictService.java @@ -9,6 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -28,7 +29,7 @@ public interface RemoteDictService { * @param type 字典类型 * @return 返回字典项列表 */ - @GetMapping(value = AppConstants.APP_SYSTEM + "/dictData/getDictByType/{type}", headers = SecurityConstants.HEADER_FROM_IN) - R> getDictByType(@PathVariable("type") String type); + @GetMapping(value = AppConstants.APP_SYSTEM + "/dictData/dictType") + R> dictType(@RequestParam("type") String type, @RequestParam("tenantId") String tenantId); } diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteSsoUserService.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteSsoUserService.java index 4a6c03e5..91683dca 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteSsoUserService.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/feign/RemoteSsoUserService.java @@ -8,6 +8,10 @@ import com.cloud.kicc.common.data.entity.SsoUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Map; /** *

@@ -22,10 +26,10 @@ public interface RemoteSsoUserService { /** * 通过用户名查询用户 - * @param ssoUser sso用户 + * @param param 参数 * @return R */ @GetMapping(value = AppConstants.APP_SYSTEM + "/ssoUser/selectByUserNameAndSsoUser", headers = SecurityConstants.HEADER_FROM_IN) - R selectByUserNameAndSsoUser(SsoUser ssoUser); + R selectByUserNameAndSsoUser(@RequestParam("param") Map param); } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java index 59365ede..b155e1ab 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/AppController.java @@ -1,5 +1,6 @@ package com.cloud.kicc.system.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; @@ -9,12 +10,10 @@ import com.cloud.kicc.system.service.AppService; import com.cloud.kicc.system.service.ISsoUserService; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** *

@@ -42,15 +41,16 @@ public class AppController { /** * 获取指定用户全部信息 - * @param ssoUser SSO用户 + * @param param 参数 * @return 用户信息 */ @Inner @GetMapping("/selectByPhoneAndSsoUser") - public R selectByPhoneAndSsoUser(SsoUser ssoUser) { + public R selectByPhoneAndSsoUser(@RequestParam Map param) { List user = iSsoUserService.list(Wrappers.lambdaQuery() - .eq(SsoUser::getPhone, ssoUser.getPhone()) - .eq(SsoUser::getIdentityProvider, ssoUser.getIdentityProvider())); + .eq(SsoUser::getPhone, param.get("phone")) + .eq(SsoUser::getTenantId, param.get("tenantId")) + .eq(StrUtil.isNotBlank(param.get("identityProvider")) ,SsoUser::getIdentityProvider, param.get("identityProvider"))); if (user.isEmpty()) { return R.error("该手机号不存在,请先注册!"); } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/DictDataController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/DictDataController.java index 8b8ec6ee..883c6375 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/DictDataController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/DictDataController.java @@ -57,16 +57,13 @@ public class DictDataController { return R.ok(dictDataService.getById(id)); } - @Inner - @GetMapping("/getDictByType/{type}") + @Inner(false) + @GetMapping("/dictType") @Cacheable(value = CacheConstants.DICT_DETAILS, key = "#type") - public R getDictByType(@PathVariable String type) { - return R.ok(dictDataService.list(Wrappers.query().lambda().eq(DictData::getDictType, type))); - } - - @GetMapping("/dictType/{dictType}") - public R dictType(@PathVariable String dictType) { - return remoteDictService.getDictByType(dictType); + public R dictType(String type, String tenantId) { + return R.ok(dictDataService.list(Wrappers.query().lambda() + .eq(DictData::getDictType, type) + .eq(StrUtil.isNotBlank(tenantId), DictData::getTenantId, tenantId))); } @SysLog("字典数据新增") diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/SsoUserController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/SsoUserController.java index b4880abc..8cfb5377 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/SsoUserController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/SsoUserController.java @@ -21,6 +21,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Arrays; +import java.util.Map; /** *

@@ -90,10 +91,11 @@ public class SsoUserController { @Inner @GetMapping("/selectByUserNameAndSsoUser") - public R selectByUserNameAndSsoUser(SsoUser ssoUser) { + public R selectByUserNameAndSsoUser(@RequestParam Map param) { SsoUser user = iSsoUserService.getOne(Wrappers.lambdaQuery() - .eq(SsoUser::getUserName, ssoUser.getUserName()) - .eq(SsoUser::getIdentityProvider, ssoUser.getIdentityProvider())); + .eq(SsoUser::getUserName, param.get("username")) + .eq(SsoUser::getTenantId, param.get("tenantId")) + .eq(StrUtil.isNotBlank(param.get("identityProvider")) ,SsoUser::getIdentityProvider, param.get("identityProvider"))); if (user == null) { return R.error("该用户不存在,请注册!"); }