@Transactional private User getUser(LDAPUser user, boolean importPrivilegesFromLdap, String userName) { UserRepository userRepo = ApplicationContextHolder.get().getBean(UserRepository.class); User loadedUser = userRepo.findOneByUsername(userName); User toSave; if (loadedUser != null) { // If we don't import privileges from LDAP // Set the LDAP user profile to be the one set // in the local database. If not, the db profile // would be always reset by merge. if (!importPrivilegesFromLdap) { user.getUser().setProfile(loadedUser.getProfile()); } loadedUser.mergeUser(user.getUser(), false); if (Log.isDebugEnabled(Geonet.LDAP)) { Log.debug( Geonet.LDAP, " - Update LDAP user " + user.getUsername() + " (" + loadedUser.getId() + ") in local database."); } toSave = loadedUser; } else { if (Log.isDebugEnabled(Geonet.LDAP)) { Log.debug(Geonet.LDAP, " - Saving new LDAP user " + user.getUsername() + " to database."); } toSave = user.getUser(); } toSave.getSecurity().setAuthType(LDAPConstants.LDAP_FLAG); toSave = userRepo.save(toSave); user.setUser(toSave); return toSave; }