Ver Fonte

fix search user duplication issue (#4371)

* fix search user duplication issue
Jason Song há 2 anos atrás
pai
commit
f929541b70

+ 2 - 1
CHANGES.md

@@ -5,6 +5,7 @@ Release Notes.
 Apollo 2.0.1
 
 ------------------
-* [Upgrade spring boot to fix search user issue](https://github.com/apolloconfig/apollo/issues/4366)
+* [Upgrade spring boot to fix search user issue](https://github.com/apolloconfig/apollo/pull/4366)
+* [Fix search user duplication issue](https://github.com/apolloconfig/apollo/pull/4371)
 ------------------
 All issues and pull requests are [here](https://github.com/apolloconfig/apollo/milestone/12?closed=1)

+ 10 - 4
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/oidc/OidcLocalUserServiceImpl.java

@@ -23,7 +23,9 @@ import com.ctrip.framework.apollo.portal.repository.UserRepository;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -98,18 +100,22 @@ public class OidcLocalUserServiceImpl implements OidcLocalUserService {
     if (StringUtils.isEmpty(keyword)) {
       return userRepository.findFirst20ByEnabled(1);
     }
-    List<UserPO> users = new ArrayList<>();
+    Map<Long, UserPO> users = new HashMap<>();
     List<UserPO> byUsername = userRepository
         .findByUsernameLikeAndEnabled("%" + keyword + "%", 1);
     List<UserPO> byUserDisplayName = userRepository
         .findByUserDisplayNameLikeAndEnabled("%" + keyword + "%", 1);
     if (!CollectionUtils.isEmpty(byUsername)) {
-      users.addAll(byUsername);
+      for (UserPO user : byUsername) {
+        users.put(user.getId(), user);
+      }
     }
     if (!CollectionUtils.isEmpty(byUserDisplayName)) {
-      users.addAll(byUserDisplayName);
+      for (UserPO user : byUserDisplayName) {
+        users.put(user.getId(), user);
+      }
     }
-    return users;
+    return new ArrayList<>(users.values());
   }
 
   @Override

+ 10 - 4
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/springsecurity/SpringSecurityUserService.java

@@ -24,6 +24,8 @@ import com.ctrip.framework.apollo.portal.repository.AuthorityRepository;
 import com.ctrip.framework.apollo.portal.repository.UserRepository;
 import com.ctrip.framework.apollo.portal.spi.UserService;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -91,18 +93,22 @@ public class SpringSecurityUserService implements UserService {
     if (StringUtils.isEmpty(keyword)) {
       return userRepository.findFirst20ByEnabled(1);
     }
-    List<UserPO> users = new ArrayList<>();
+    Map<Long, UserPO> users = new HashMap<>();
     List<UserPO> byUsername = userRepository
         .findByUsernameLikeAndEnabled("%" + keyword + "%", 1);
     List<UserPO> byUserDisplayName = userRepository
         .findByUserDisplayNameLikeAndEnabled("%" + keyword + "%", 1);
     if (!CollectionUtils.isEmpty(byUsername)) {
-      users.addAll(byUsername);
+      for (UserPO user : byUsername) {
+        users.put(user.getId(), user);
+      }
     }
     if (!CollectionUtils.isEmpty(byUserDisplayName)) {
-      users.addAll(byUserDisplayName);
+      for (UserPO user : byUserDisplayName) {
+        users.put(user.getId(), user);
+      }
     }
-    return users;
+    return new ArrayList<>(users.values());
   }
 
   @Override