public class CmsLoginManager extends java.lang.Object
Stores invalid login attempts and disables a user account temporarily in case the configured threshold of invalid logins is reached.
The invalid login attempt storage operates on a combination of user name, login remote IP address and user type. This means that a user can be disabled for one remote IP, but still be enabled for another remote IP.
Also allows to temporarily disallow logins (for example in case of maintenance work on the system).
Modifier and Type | Field and Description |
---|---|
static long |
DEFAULT_TOKEN_LIFETIME
Default token lifetime.
|
static int |
DISABLE_MINUTES_DEFAULT
Default lock time if treshold for bad login attempts is reached.
|
static boolean |
ENABLE_SECURITY_DEFAULT
Default setting for the security option.
|
static java.lang.String |
KEY_SEPARATOR
Separator used for storage keys.
|
protected int |
m_disableMillis
The milliseconds to disable an account if the threshold is reached.
|
protected int |
m_disableMinutes
The minutes to disable an account if the threshold is reached.
|
protected boolean |
m_enableSecurity
The flag to determine if the security option ahould be enabled on the login dialog.
|
protected int |
m_maxBadAttempts
The number of bad login attempts allowed before an account is temporarily disabled.
|
protected java.util.Map<java.lang.String,org.opencms.db.CmsLoginManager.CmsUserData> |
m_storage
The storage for the bad login attempts.
|
protected java.lang.String |
m_tokenLifetimeStr
The token lifetime.
|
static int |
MAX_BAD_ATTEMPTS_DEFAULT
Default for bad login attempts.
|
protected static java.util.Map<java.lang.String,java.util.Set<org.opencms.db.CmsLoginManager.CmsUserData>> |
TEMP_DISABLED_USER
Map holding usernames and userdata for user which are currently locked.
|
Constructor and Description |
---|
CmsLoginManager(int disableMinutes,
int maxBadAttempts,
boolean enableSecurity,
java.lang.String tokenLifetime,
java.lang.String maxInactive,
java.lang.String passwordChangeInterval,
java.lang.String userDataCheckInterval)
Creates a new storage for invalid logins.
|
Modifier and Type | Method and Description |
---|---|
protected void |
addInvalidLogin(java.lang.String userName,
java.lang.String remoteAddress)
Adds an invalid attempt to login for the given user / IP to the storage.
|
boolean |
canLockBecauseOfInactivity(CmsObject cms,
CmsUser user)
Checks whether a user account can be locked because of inactivity.
|
boolean |
checkInactive(CmsUser user)
Checks whether the given user has been inactive for longer than the configured limit.
|
void |
checkInvalidLogins(java.lang.String userName,
java.lang.String remoteAddress)
Checks if the threshold for the invalid logins has been reached for the given user.
|
void |
checkLoginAllowed()
Checks if a login is currently allowed.
|
CmsLoginMessage |
getBeforeLoginMessage()
Returns the current before login message that is displayed on the login form.
|
int |
getDisableMinutes()
Returns the minutes an account gets disabled after too many failed login attempts.
|
CmsLoginMessage |
getLoginMessage()
Returns the current login message that is displayed if a user logs in.
|
int |
getMaxBadAttempts()
Returns the number of bad login attempts allowed before an account is temporarily disabled.
|
java.lang.String |
getMaxInactive()
Gets the max inactivity time.
|
long |
getPasswordChangeInterval()
Gets the password change interval.
|
java.lang.String |
getPasswordChangeIntervalStr()
Gets the raw password change interval string.
|
long |
getTokenLifetime()
Gets the authorization token lifetime in milliseconds.
|
java.lang.String |
getTokenLifetimeStr()
Gets the configured token lifetime as a string.
|
long |
getUserDataCheckInterval()
Gets the user data check interval.
|
java.lang.String |
getUserDataCheckIntervalStr()
Gets the raw user data check interval string.
|
boolean |
isEnableSecurity()
Returns if the security option ahould be enabled on the login dialog.
|
boolean |
isPasswordReset(CmsObject cms,
CmsUser user)
Checks if password has to be reset.
|
boolean |
isUserLocked(CmsUser user)
Checks if a user is locked due to too many failed logins.
|
boolean |
isUserTempDisabled(java.lang.String username)
Checks if given user it temporarily locked.
|
protected void |
removeInvalidLogins(java.lang.String userName,
java.lang.String remoteAddress)
Removes all invalid attempts to login for the given user / IP.
|
void |
removeLoginMessage(CmsObject cms)
Removes the current login message.
|
boolean |
requiresPasswordChange(CmsObject cms,
CmsUser user)
Checks if a user is required to change his password now.
|
boolean |
requiresUserDataCheck(CmsObject cms,
CmsUser user)
Checks if a user is required to change his password now.
|
void |
resetUserTempDisable(java.lang.String username)
Resets lock from user.
|
void |
setBeforeLoginMessage(CmsObject cms,
CmsLoginMessage message)
Sets the before login message to display on the login form.
|
void |
setLoginMessage(CmsObject cms,
CmsLoginMessage message)
Sets the login message to display if a user logs in.
|
void |
unlockUser(CmsObject cms,
CmsUser user)
Unlocks a user who has exceeded his number of failed login attempts so that he can try to log in again.
|
public static final long DEFAULT_TOKEN_LIFETIME
public static final int DISABLE_MINUTES_DEFAULT
public static final boolean ENABLE_SECURITY_DEFAULT
public static final java.lang.String KEY_SEPARATOR
public static final int MAX_BAD_ATTEMPTS_DEFAULT
protected static java.util.Map<java.lang.String,java.util.Set<org.opencms.db.CmsLoginManager.CmsUserData>> TEMP_DISABLED_USER
protected int m_disableMillis
protected int m_disableMinutes
protected boolean m_enableSecurity
protected int m_maxBadAttempts
protected java.util.Map<java.lang.String,org.opencms.db.CmsLoginManager.CmsUserData> m_storage
protected java.lang.String m_tokenLifetimeStr
public CmsLoginManager(int disableMinutes, int maxBadAttempts, boolean enableSecurity, java.lang.String tokenLifetime, java.lang.String maxInactive, java.lang.String passwordChangeInterval, java.lang.String userDataCheckInterval)
disableMinutes
- the minutes to disable an account if the threshold is reachedmaxBadAttempts
- the number of bad login attempts allowed before an account is temporarily disabledenableSecurity
- flag to determine if the security option should be enabled on the login dialogtokenLifetime
- the lifetime of authorization tokens, i.e. the time for which they are validmaxInactive
- maximum inactivity timepasswordChangeInterval
- the password change intervaluserDataCheckInterval
- the user data check intervalpublic boolean canLockBecauseOfInactivity(CmsObject cms, CmsUser user)
cms
- the CMS contextuser
- the user to checkpublic boolean checkInactive(CmsUser user)
If no max inactivity time is configured, always returns false.
user
- the user to checkpublic void checkInvalidLogins(java.lang.String userName, java.lang.String remoteAddress) throws CmsAuthentificationException
In case the configured threshold is reached, an Exception is thrown.
userName
- the name of the userremoteAddress
- the remote address (IP) from which the login attempt was madeCmsAuthentificationException
- in case the threshold of invalid login attempts has been reachedpublic void checkLoginAllowed() throws CmsAuthentificationException
In case no logins are allowed, an Exception is thrown.
CmsAuthentificationException
- in case no logins are allowedpublic CmsLoginMessage getBeforeLoginMessage()
if null
is returned, no login message has been currently set.
public int getDisableMinutes()
public CmsLoginMessage getLoginMessage()
if null
is returned, no login message has been currently set.
public int getMaxBadAttempts()
public java.lang.String getMaxInactive()
public long getPasswordChangeInterval()
public java.lang.String getPasswordChangeIntervalStr()
public long getTokenLifetime()
public java.lang.String getTokenLifetimeStr()
public long getUserDataCheckInterval()
public java.lang.String getUserDataCheckIntervalStr()
public boolean isEnableSecurity()
true
if the security option ahould be enabled on the login dialog, otherwise false
public boolean isPasswordReset(CmsObject cms, CmsUser user)
cms
- CmsObjectuser
- CmsUserpublic boolean isUserLocked(CmsUser user)
user
- the user to checkpublic boolean isUserTempDisabled(java.lang.String username)
username
- to checkpublic void removeLoginMessage(CmsObject cms) throws CmsRoleViolationException
This operation requires that the current user has role permissions of
.CmsRole.ROOT_ADMIN
cms
- the current OpenCms user contextCmsRoleViolationException
- in case the current user does not have the required role permissionspublic boolean requiresPasswordChange(CmsObject cms, CmsUser user)
cms
- the current CMS contextuser
- the user to checkpublic boolean requiresUserDataCheck(CmsObject cms, CmsUser user)
cms
- the current CMS contextuser
- the user to checkpublic void resetUserTempDisable(java.lang.String username)
username
- to reset lock forpublic void setBeforeLoginMessage(CmsObject cms, CmsLoginMessage message) throws CmsRoleViolationException
This operation requires that the current user has role permissions of
.CmsRole.ROOT_ADMIN
cms
- the current OpenCms user contextmessage
- the message to setCmsRoleViolationException
- in case the current user does not have the required role permissionspublic void setLoginMessage(CmsObject cms, CmsLoginMessage message) throws CmsRoleViolationException
This operation requires that the current user has role permissions of
.CmsRole.ROOT_ADMIN
cms
- the current OpenCms user contextmessage
- the message to setCmsRoleViolationException
- in case the current user does not have the required role permissionspublic void unlockUser(CmsObject cms, CmsUser user) throws CmsRoleViolationException
This requires the "account manager" role.
cms
- the current CMS contextuser
- the user to unlockCmsRoleViolationException
- if the permission check failsprotected void addInvalidLogin(java.lang.String userName, java.lang.String remoteAddress)
In case the configured threshold is reached, the user is disabled for the configured time.
userName
- the name of the userremoteAddress
- the remore address (IP) from which the login attempt was madeprotected void removeInvalidLogins(java.lang.String userName, java.lang.String remoteAddress)
userName
- the name of the userremoteAddress
- the remore address (IP) from which the login attempt was made