Added option for case-insensitive username

This commit is contained in:
mp-loki 2018-11-13 16:48:18 +02:00
parent 289a5f5feb
commit 0a07e2d226
2 changed files with 14 additions and 1 deletions

View File

@ -99,6 +99,8 @@ security:
tokenSigningKey: "${JWT_TOKEN_SIGNING_KEY:thingsboardDefaultSigningKey}" tokenSigningKey: "${JWT_TOKEN_SIGNING_KEY:thingsboardDefaultSigningKey}"
# Enable/disable access to Tenant Administrators JWT token by System Administrator or Customer Users JWT token by Tenant Administrator # Enable/disable access to Tenant Administrators JWT token by System Administrator or Customer Users JWT token by Tenant Administrator
user_token_access_enabled: "${SECURITY_USER_TOKEN_ACCESS_ENABLED:true}" user_token_access_enabled: "${SECURITY_USER_TOKEN_ACCESS_ENABLED:true}"
# Enable/disable case-sensitive username login
user_login_case_sensitive: "${SECURITY_USER_LOGIN_CASE_SENSITIVE:true}"
# Dashboard parameters # Dashboard parameters
dashboard: dashboard:

View File

@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.Tenant;
@ -54,6 +55,9 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
public static final String INCORRECT_USER_ID = "Incorrect userId "; public static final String INCORRECT_USER_ID = "Incorrect userId ";
public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; public static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
@Value("${security.user_login_case_sensitive}")
private boolean userLoginCaseSensitive;
@Autowired @Autowired
private UserDao userDao; private UserDao userDao;
@ -70,7 +74,11 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
public User findUserByEmail(TenantId tenantId, String email) { public User findUserByEmail(TenantId tenantId, String email) {
log.trace("Executing findUserByEmail [{}]", email); log.trace("Executing findUserByEmail [{}]", email);
validateString(email, "Incorrect email " + email); validateString(email, "Incorrect email " + email);
return userDao.findByEmail(tenantId, email); if (userLoginCaseSensitive) {
return userDao.findByEmail(tenantId, email);
} else {
return userDao.findByEmail(tenantId, email.toLowerCase());
}
} }
@Override @Override
@ -91,6 +99,9 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
public User saveUser(User user) { public User saveUser(User user) {
log.trace("Executing saveUser [{}]", user); log.trace("Executing saveUser [{}]", user);
userValidator.validate(user, User::getTenantId); userValidator.validate(user, User::getTenantId);
if (user.getId() == null && !userLoginCaseSensitive) {
user.setEmail(user.getEmail().toLowerCase());
}
User savedUser = userDao.save(user.getTenantId(), user); User savedUser = userDao.save(user.getTenantId(), user);
if (user.getId() == null) { if (user.getId() == null) {
UserCredentials userCredentials = new UserCredentials(); UserCredentials userCredentials = new UserCredentials();