[New] Allow case insensitive usernames in privilege
This commit is contained in:
parent
eb702466bf
commit
74a0c5f8a4
|
@ -171,6 +171,11 @@ public interface PrivilegeHandler {
|
||||||
*/
|
*/
|
||||||
String PARAM_ALLOW_SESSION_REFRESH = "allowSessionRefresh"; //$NON-NLS-1$
|
String PARAM_ALLOW_SESSION_REFRESH = "allowSessionRefresh"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* configuration parameter to define if username is case insensitive
|
||||||
|
*/
|
||||||
|
String PARAM_CASE_INSENSITIVE_USERNAME = "caseInsensitiveUsername"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* configuration parameter to define a secret salt
|
* configuration parameter to define a secret salt
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.privilege.handler;
|
package li.strolch.privilege.handler;
|
||||||
|
|
||||||
|
import static li.strolch.privilege.handler.PrivilegeHandler.PARAM_CASE_INSENSITIVE_USERNAME;
|
||||||
import static li.strolch.privilege.helper.XmlConstants.*;
|
import static li.strolch.privilege.helper.XmlConstants.*;
|
||||||
import static li.strolch.utils.helper.StringHelper.formatNanoDuration;
|
import static li.strolch.utils.helper.StringHelper.formatNanoDuration;
|
||||||
|
|
||||||
|
@ -58,6 +59,8 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
private File usersPath;
|
private File usersPath;
|
||||||
private File rolesPath;
|
private File rolesPath;
|
||||||
|
|
||||||
|
private boolean caseInsensitiveUsername;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> getParameterMap() {
|
public Map<String, String> getParameterMap() {
|
||||||
return this.parameterMap;
|
return this.parameterMap;
|
||||||
|
@ -79,7 +82,7 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User getUser(String username) {
|
public User getUser(String username) {
|
||||||
return this.userMap.get(username);
|
return this.userMap.get(this.caseInsensitiveUsername ? username.toLowerCase() : username);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -89,7 +92,7 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User removeUser(String username) {
|
public User removeUser(String username) {
|
||||||
User user = this.userMap.remove(username);
|
User user = this.userMap.remove(this.caseInsensitiveUsername ? username.toLowerCase() : username);
|
||||||
this.userMapDirty = user != null;
|
this.userMapDirty = user != null;
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +106,8 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addUser(User user) {
|
public void addUser(User user) {
|
||||||
if (this.userMap.containsKey(user.getUsername()))
|
if (this.userMap
|
||||||
|
.containsKey(this.caseInsensitiveUsername ? user.getUsername().toLowerCase() : user.getUsername()))
|
||||||
throw new IllegalStateException(MessageFormat.format("The user {0} already exists!", user.getUsername()));
|
throw new IllegalStateException(MessageFormat.format("The user {0} already exists!", user.getUsername()));
|
||||||
this.userMap.put(user.getUsername(), user);
|
this.userMap.put(user.getUsername(), user);
|
||||||
this.userMapDirty = true;
|
this.userMapDirty = true;
|
||||||
|
@ -145,7 +149,7 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void initialize(Map<String, String> paramsMap) {
|
public void initialize(Map<String, String> paramsMap) {
|
||||||
this.parameterMap = Collections.unmodifiableMap(new HashMap<>(paramsMap));
|
this.parameterMap = Map.copyOf(paramsMap);
|
||||||
|
|
||||||
// get and validate base bath
|
// get and validate base bath
|
||||||
String basePath = this.parameterMap.get(XML_PARAM_BASE_PATH);
|
String basePath = this.parameterMap.get(XML_PARAM_BASE_PATH);
|
||||||
|
@ -197,6 +201,8 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
this.usersPath = usersPath;
|
this.usersPath = usersPath;
|
||||||
this.rolesPath = rolesPath;
|
this.rolesPath = rolesPath;
|
||||||
|
|
||||||
|
this.caseInsensitiveUsername = Boolean.parseBoolean(this.parameterMap.get(PARAM_CASE_INSENSITIVE_USERNAME));
|
||||||
|
|
||||||
if (reload())
|
if (reload())
|
||||||
logger.info("Privilege Data loaded."); //$NON-NLS-1$
|
logger.info("Privilege Data loaded."); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -210,8 +216,8 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean reload() {
|
public boolean reload() {
|
||||||
|
|
||||||
this.roleMap = Collections.synchronizedMap(new HashMap<String, Role>());
|
this.roleMap = Collections.synchronizedMap(new HashMap<>());
|
||||||
this.userMap = Collections.synchronizedMap(new HashMap<String, User>());
|
this.userMap = Collections.synchronizedMap(new HashMap<>());
|
||||||
|
|
||||||
// parse models xml file to XML document
|
// parse models xml file to XML document
|
||||||
PrivilegeUsersSaxReader usersXmlHandler = new PrivilegeUsersSaxReader();
|
PrivilegeUsersSaxReader usersXmlHandler = new PrivilegeUsersSaxReader();
|
||||||
|
@ -232,7 +238,8 @@ public class XmlPersistenceHandler implements PersistenceHandler {
|
||||||
// USERS
|
// USERS
|
||||||
List<User> users = usersXmlHandler.getUsers();
|
List<User> users = usersXmlHandler.getUsers();
|
||||||
for (User user : users) {
|
for (User user : users) {
|
||||||
this.userMap.put(user.getUsername(), user);
|
this.userMap
|
||||||
|
.put(this.caseInsensitiveUsername ? user.getUsername().toLowerCase() : user.getUsername(), user);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.userMapDirty = false;
|
this.userMapDirty = false;
|
||||||
|
|
Loading…
Reference in New Issue