public class DefaultGroupManager extends java.lang.Object implements GroupManager, Authorizer, WikiEventListener
Facade class for storing, retrieving and managing wiki groups on behalf of AuthorizationManager, JSPs and other presentation-layer
classes. GroupManager works in collaboration with a back-end GroupDatabase, which persists groups to permanent storage.
Note: prior to JSPWiki 2.4.19, GroupManager was an interface; it is now a concrete, final class. The aspects of GroupManager which previously extracted group information from storage (e.g., wiki pages) have been refactored into the GroupDatabase interface.
| Modifier and Type | Field and Description |
|---|---|
protected Engine |
m_engine |
protected WikiEventListener |
m_groupListener |
MESSAGES_KEY, PROP_GROUPDATABASE| Constructor and Description |
|---|
DefaultGroupManager() |
| Modifier and Type | Method and Description |
|---|---|
void |
actionPerformed(WikiEvent event) |
void |
addWikiEventListener(WikiEventListener listener)
Registers a WikiEventListener with this instance.
|
void |
checkGroupName(Context context,
java.lang.String name)
Checks if a String is blank or a restricted Group name, and if it is, appends an error to the Session's message list.
|
protected java.lang.String[] |
extractMembers(java.lang.String memberLine)
Extracts carriage-return separated members into a Set of String objects.
|
java.security.Principal |
findRole(java.lang.String name)
Looks up and returns a role Principal matching a given String.
|
Group |
getGroup(java.lang.String name)
Returns the Group matching a given name.
|
GroupDatabase |
getGroupDatabase()
Returns the current external
GroupDatabase in use. |
java.security.Principal[] |
getRoles()
Returns an array of role Principals this Authorizer knows about.
|
void |
initialize(Engine engine,
java.util.Properties props)
Initializes the authorizer.
|
boolean |
isUserInRole(Session session,
java.security.Principal role)
Determines whether the Subject associated with a WikiSession is in a particular role.
|
Group |
parseGroup(java.lang.String name,
java.lang.String memberLine,
boolean create)
Extracts group name and members from passed parameters and populates an existing Group with them.
|
void |
removeGroup(java.lang.String index)
Removes a named Group from the group database.
|
void |
removeWikiEventListener(WikiEventListener listener)
Un-registers a WikiEventListener with this instance.
|
void |
setGroup(Session session,
Group group)
Saves the
Group created by a user in a wiki session. |
void |
validateGroup(Context context,
Group group)
Validates a Group, and appends any errors to the session errors list.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitfireEvent, parseGroupprotected WikiEventListener m_groupListener
public DefaultGroupManager()
public java.security.Principal findRole(java.lang.String name)
null. Note that it may not always be feasible for an Authorizer implementation to return a role Principal.findRole in interface Authorizername - the name of the role to retrievepublic Group getGroup(java.lang.String name) throws NoSuchPrincipalException
NoSuchPrincipalException.getGroup in interface GroupManagername - the name of the group to findNoSuchPrincipalException - if the group cannot be foundpublic GroupDatabase getGroupDatabase() throws WikiSecurityException
GroupDatabase in use. This method is guaranteed to return a properly-initialized GroupDatabase,
unless it could not be initialized. In that case, this method throws a WikiException. The
GroupDatabase is lazily initialized.getGroupDatabase in interface GroupManagerWikiSecurityException - if the GroupDatabase could not be initializedpublic java.security.Principal[] getRoles()
getRoles in interface Authorizerpublic void initialize(Engine engine, java.util.Properties props) throws WikiSecurityException
initialize in interface Initializableinitialize in interface Authorizerengine - the current wiki engineprops - the wiki engine initialization propertiesWikiSecurityException - if the Authorizer could not be initializedpublic boolean isUserInRole(Session session, java.security.Principal role)
null,
this method must return false.isUserInRole in interface Authorizersession - the current WikiSessionrole - the role to checktrue if the user is considered to be in the role, false otherwisepublic Group parseGroup(java.lang.String name, java.lang.String memberLine, boolean create) throws WikiSecurityException
Extracts group name and members from passed parameters and populates an existing Group with them. The Group will either be a copy of an existing Group (if one can be found), or a new, unregistered Group (if not). Optionally, this method can throw a WikiSecurityException if the Group does not yet exist in the GroupManager cache.
The group parameter in the HTTP request contains the Group name to look up and populate. The members
parameter contains the member list. If these differ from those in the existing group, the passed values override the old values.
This method does not commit the new Group to the GroupManager cache. To do that, use GroupManager.setGroup(Session, Group).
parseGroup in interface GroupManagername - the name of the group to constructmemberLine - the line of text containing the group membership listcreate - whether this method should create a new, empty Group if one with the requested name is not found. If false,
groups that do not exist will cause a NoSuchPrincipalException to be thrownWikiSecurityException - if the group name isn't allowed, or if create is false
and the Group named name does not existGroup.RESTRICTED_GROUPNAMESpublic void removeGroup(java.lang.String index) throws WikiSecurityException
NoSuchPrincipalException. After removal, this
method will commit the delete to the back-end group database. It will also fire a
WikiSecurityEvent.GROUP_REMOVE event with the GroupManager instance as the source and the Group as target.
If index is null, this method throws an IllegalArgumentException.removeGroup in interface GroupManagerindex - the group to removeWikiSecurityException - if the Group cannot be removed by the back-endGroupDatabase.delete(Group)public void setGroup(Session session, Group group) throws WikiSecurityException
Saves the Group created by a user in a wiki session. This method registers the Group with the GroupManager and saves it to
the back-end database. If an existing Group with the same name already exists, the new group will overwrite it. After saving the
Group, the group database changes are committed.
This method fires the following events:
WikiSecurityEvent.GROUP_ADD with
the GroupManager instance as its source and the new Group as the target.WikiSecurityEvent.GROUP_REMOVE with this GroupManager instance as the source, and the new Group as the
target. It then fires a WikiSecurityEvent.GROUP_ADD event with the same source and target.
In addition, if the save or commit actions fail, this method will attempt to restore the older version of the wiki group if it
exists. This will result in a GROUP_REMOVE event (for the new version of the Group) followed by a GROUP_ADD
event (to indicate restoration of the old version).
This method will register the new Group with the GroupManager. For example, AuthenticationManager
attaches each Session as a GroupManager listener. Thus, the act of registering a Group with setGroup means that
all Sessions will automatically receive group add/change/delete events immediately.
setGroup in interface GroupManagersession - the wiki session, which may not be nullgroup - the Group, which may not be nullWikiSecurityException - if the Group cannot be saved by the back-endpublic void validateGroup(Context context, Group group)
Session.getMessages().validateGroup in interface GroupManagercontext - the current wiki contextgroup - the supplied Grouppublic void checkGroupName(Context context, java.lang.String name) throws WikiSecurityException
checkGroupName in interface GroupManagercontext - the wiki contextname - the Group name to testWikiSecurityException - if session is null or the Group name is illegalGroup.RESTRICTED_GROUPNAMESprotected java.lang.String[] extractMembers(java.lang.String memberLine)
memberLine - the list of memberspublic void addWikiEventListener(WikiEventListener listener)
addWikiEventListener in interface GroupManagerlistener - the event listenerpublic void removeWikiEventListener(WikiEventListener listener)
removeWikiEventListener in interface GroupManagerlistener - the event listenerpublic void actionPerformed(WikiEvent event)
actionPerformed in interface WikiEventListenerCopyright (c) 2001-2022 The Apache Software Foundation. All rights reserved.