From 493f678643a254a71c72960f3768aa043076c8cb Mon Sep 17 00:00:00 2001 From: shiziyuan9527 Date: Mon, 9 Jan 2023 15:23:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE):?= =?UTF-8?q?=20LDAP=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metersphere/gateway/service/LdapService.java | 16 ++++++++++++---- .../gateway/service/UserLoginService.java | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/framework/gateway/src/main/java/io/metersphere/gateway/service/LdapService.java b/framework/gateway/src/main/java/io/metersphere/gateway/service/LdapService.java index 5a6370e0c1..86e697c36f 100644 --- a/framework/gateway/src/main/java/io/metersphere/gateway/service/LdapService.java +++ b/framework/gateway/src/main/java/io/metersphere/gateway/service/LdapService.java @@ -107,14 +107,22 @@ public class LdapService { } else { // 更新 u.setName(name); - u.setPhone(phone); - u.setEmail(email); + if (StringUtils.isNotBlank(phone)) { + u.setPhone(phone); + } + if (StringUtils.isNotBlank(email)) { + u.setEmail(email); + } userLoginService.updateUser(u); } - // 执行 LocalRealm 中 LDAP 登录逻辑 LoginRequest loginRequest = new LoginRequest(); - loginRequest.setUsername(userId); + if (u != null) { + // 根据id或email查找到了用户,后续使用此用户id登录 + loginRequest.setUsername(u.getId()); + } else { + loginRequest.setUsername(userId); + } loginRequest.setAuthenticate(UserSource.LDAP.name()); Optional sessionUser = userLoginService.login(loginRequest, session, locale); diff --git a/framework/gateway/src/main/java/io/metersphere/gateway/service/UserLoginService.java b/framework/gateway/src/main/java/io/metersphere/gateway/service/UserLoginService.java index 918dcffcba..eb6e1f778e 100644 --- a/framework/gateway/src/main/java/io/metersphere/gateway/service/UserLoginService.java +++ b/framework/gateway/src/main/java/io/metersphere/gateway/service/UserLoginService.java @@ -65,7 +65,8 @@ public class UserLoginService { } private UserDTO loginLdapMode(String userId) { - UserDTO loginUser = getLoginUser(userId, Collections.singletonList(UserSource.LDAP.name())); + // LDAP验证通过之后,如果用户存在且用户类型是LDAP或LOCAL,返回用户 + UserDTO loginUser = getLoginUser(userId, Arrays.asList(UserSource.LDAP.name(), UserSource.LOCAL.name())); if (loginUser == null) { MSException.throwException(Translator.get("user_not_found_or_not_unique")); }