public class DatabaseUserStore extends AbstractModule implements ModifyableUserStore
A user store which stores users in a relational database. Needs a module implementing the DatabaseInterface to work. The user data is stored in three tables, which need to be created beforehand. Following sql script will generate the tables on MySQL, you may need to adjust it slightly for other database systems.
create table USERS( ID bigint AUTO_INCREMENT primary key, USERNAME varchar(256) not null collate utf8_bin ); create table USER_ROLES( USERID bigint not null references USERS(ID), ROLE varchar(256) not null collate utf8_bin ); create table USER_PROPS( USERID bigint not null references USERS(ID), PROPKEY varchar(256) not null collate utf8_bin, PROPVALUE varchar(2048) collate utf8_bin );
You may prefix each table with a prefix of your choosing. Specify it in the initialisation parameters with tablePrefix.
Any changes to the user store are immediately stored in the database when saveUser is called.
Modifier and Type | Class and Description |
---|---|
protected static class |
DatabaseUserStore.DBUser |
Modifier and Type | Field and Description |
---|---|
protected DatabaseInterface |
database |
private java.lang.Object |
modifyLock |
protected java.lang.String |
tablePrefix |
protected java.util.HashMap<java.lang.String,DatabaseUserStore.DBUser> |
users |
autoStart, isInitialized, isRunning, logging, loggingModule, moduleManager
Constructor and Description |
---|
DatabaseUserStore() |
Modifier and Type | Method and Description |
---|---|
protected boolean |
commitDeleteUser(java.lang.String userName) |
protected DatabaseUserStore.DBUser |
commitNewUser(java.lang.String userName) |
protected boolean |
commitUser(DatabaseUserStore.DBUser user) |
boolean |
deleteUser(java.lang.String user)
Deletes a user from this user store.
|
protected void |
fetchUsers() |
java.util.Collection<User> |
findUsers(java.lang.String key,
java.lang.String value)
Finds users based on a property value.
|
java.util.Collection<User> |
getAllUsers()
Returns a collection of all users.
|
java.util.Collection<Module> |
getDependencies(ModuleManager manager)
Returns all the modules this module depends on.
|
User |
getUser(java.lang.String user)
Finds a user with a user name.
|
protected void |
handleSQLException(java.sql.SQLException sqle) |
void |
init(ModuleManager manager,
java.util.HashMap<java.lang.String,java.lang.Object> settings)
Initialises the module.
|
User |
newUser(java.lang.String user)
Creates a new user in the user store.
|
boolean |
saveUser(User user)
Saves a user which originates from this database.
|
void |
start(ModuleManager manager)
Starts the module.
|
void |
stop(ModuleManager manager)
Stops the module.
|
isInitialized, isRunning, requireLogging, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
isInitialized, isRunning
protected java.lang.String tablePrefix
protected DatabaseInterface database
protected final java.util.HashMap<java.lang.String,DatabaseUserStore.DBUser> users
private final java.lang.Object modifyLock
protected void handleSQLException(java.sql.SQLException sqle) throws UserStoreException
UserStoreException
public java.util.Collection<Module> getDependencies(ModuleManager manager) throws ModuleException
Module
getDependencies
in interface Module
getDependencies
in class AbstractModule
manager
- The module manager handling this module.ModuleException
public void init(ModuleManager manager, java.util.HashMap<java.lang.String,java.lang.Object> settings) throws ModuleException
Module
Initialises the module. After constructor, this is the first method called in the life cycle of a module. It should not perform anything time consuming or anything with notable outside side effects. It should only read the parameters and initialise the module so that it can later be started. Note that a module being initialised doesn't mean that it necessarily will ever be started.
A ModuleException may be thrown if something vital is missing from the parameters or they are not sensible. In some cases you may not want to throw an exception even if vital initialisation information is missing. If, for example, it is possible that the module is initialised in some other way between the init and the start method calls. A ModuleException may also be thrown at the start method if the module is still not initialised.
init
in interface Module
init
in class AbstractModule
manager
- The module manager handling this module. You may keep a
reference to it if needed.ModuleException
public void start(ModuleManager manager) throws ModuleException
Module
start
in interface Module
start
in class AbstractModule
manager
- The module manager handling this module.ModuleException
public void stop(ModuleManager manager)
Module
stop
in interface Module
stop
in class AbstractModule
manager
- The module manager handling this module.public boolean deleteUser(java.lang.String user) throws UserStoreException
ModifyableUserStore
deleteUser
in interface ModifyableUserStore
user
- The user name of the user to delete.UserStoreException
public User newUser(java.lang.String user) throws UserStoreException
ModifyableUserStore
newUser
in interface ModifyableUserStore
user
- The user name of the new user.UserStoreException
public boolean saveUser(User user) throws UserStoreException
ModifyableUserStore
saveUser
in interface ModifyableUserStore
user
- The user object to save.UserStoreException
public java.util.Collection<User> findUsers(java.lang.String key, java.lang.String value) throws UserStoreException
UserStore
findUsers
in interface UserStore
key
- The property key used for the search.value
- The value of the property.UserStoreException
protected void fetchUsers() throws UserStoreException
UserStoreException
protected boolean commitUser(DatabaseUserStore.DBUser user) throws UserStoreException
UserStoreException
protected boolean commitDeleteUser(java.lang.String userName) throws UserStoreException
UserStoreException
protected DatabaseUserStore.DBUser commitNewUser(java.lang.String userName) throws UserStoreException
UserStoreException
public java.util.Collection<User> getAllUsers() throws UserStoreException
UserStore
getAllUsers
in interface UserStore
UserStoreException
public User getUser(java.lang.String user) throws UserStoreException
UserStore
getUser
in interface UserStore
user
- The user name.UserStoreException
Copyright 2004-2015 Wandora Team