Class SwitchByKeySubjectPatternMapper
- All Implemented Interfaces:
SubjectMapper,SwitchableSubjectMapper
SwitchableSubjectMapper and SubjectMapper interfaces, this class switches
the subject mappings that are being applied for a user when requested to do so by the client application.
To use SwitchByKeySubjectPatternMapper you must;
- Configure Liberator, set
Userpermissions, and create a PermissioningRuleas described in the documentation of theSwitchableSubjectMapperinterface. - Add sets of subject mappings to
SwitchByKeySubjectPatternMapper. These are the sets of subject mappings thatSwitchByKeySubjectPatternMappercan apply when requested to do so by the client application.
Sets of subject mappings are added as part of a Permissioning transaction at the Permissioning DataSource. After
subject mappings have been added, the client application can send a request to SwitchByKeySubjectPatternMapper
to map subjects using any of the added sets.
The following example shows how three sets of subject mappings are added for three named keys.
// create the three sets of mappings that will be used by the mapper
final Map>String,String> mappings1 = new HashMap>String,String>();
mappings1.put("/ABC.*", "-tier1");
mappings1.put("/DEF.*", "-tier2");
mappings1.put("/XYZ.*", "-tier2");
final Map>String,String> mappings2 = new HashMap>String,String>();
mappings2.put("/ABC.*", "-tier5");
mappings2.put("/DEF.*", "-tier6");
mappings2.put("/XYZ.*", "-tier6");
final Map>String,String> mappings3 = new HashMap>String,String>();
mappings3.put("/ABC.*", "-tier3");
mappings3.put("/DEF.*", "-tier4");
// apply the mapper and mappings to a User in a PermissioningDataSource transaction
final PermissioningDataSource pds = getPdsReferenceFromSomewhere();
pds.startUpdateTransaction();
// select the user that you want to apply this mapper to
final User user = pds.getUser("John");
// configure the user to use a SwitchByKeySubjectPatternMapper
user.setSubjectMapper(SwitchByKeySubjectPatternMapper.class.getName());
// add the three separate sets of subject mappings
user.addSubjectMapping("key1", mappings1);
user.addSubjectMapping("key2", mappings2);
user.addSubjectMapping("key3", mappings3);
pds.commitTransaction();
When the Permissioning Auth Module receives this transaction it calls updateMappings,
passing in the subject mappings for each of the named keys. The SwitchByKeySubjectPatternMapper can now
switch subject mappings when requested to do so by the client application.
For example, if the client application sends an RTTP message requesting a named set of subject mappings to be applied, and if the Account field of this message identifies the key for this set, then subjects are mapped as shown below.
- If value of the
Accountfield iskey1, subject mappings from themappings1set are applied, and therefore:- subject
/ABC123is mapped to/ABC123-tier1 - subject
/DEF123is mapped to/DEF123-tier2 - subject
/XYZ123is mapped to/XYZ123-tier2
- subject
- If value of the
Accountfield iskey2, subject mappings from themappings2set are applied, and therefore:- subject
/ABC123is mapped to/ABC123-tier5 - subject
/DEF123is mapped to/DEF123-tier6 - subject
/XYZ123is mapped to/XYZ123-tier6
- subject
- If value of the
Accountfield iskey3, subject mappings from themappings3set are applied, and therefore:- subject
/ABC123is mapped to/ABC123-tier3 - subject
/DEF123is mapped to/DEF123-tier4 - subject
/XYZ123is not mapped as there is no pattern in themappings3set that matches/XYZ123
- subject
Note that it is the Permissioning Auth Module that calls the methods of SwitchByKeySubjectPatternMapper
, and not the code that you write.
Specifying the default set of subject mappings (optional)
The Permissioning Auth Module calls switchToDefaultMappings() when the end user logs in, or if the
currently applied set of subject mappings are removed while the user is logged in. After this method is called,
SwitchByKeySubjectPatternMapper maps subjects using the default set of subject mappings (see
mapSubject(java.lang.String). If a default set is not defined, then mapSubject() returns null when called, which
indicates that the passed in subject has no mapping.
To define a default set of mappings:
- Map the reserved work
DEFAULT_MAPPINGSto the name of the key that you want to define as the default. - Add this mapping at the Pemrissioning DataSource as part of a Permissioning transaction, using the reserved
word
CONFIGURATION
The following code could be added to the example code shown above to specify that the subject mappings for
key3 are to be used as the default of set of subject mappings.
...
// set mappings3 as the default set of mappings by naming key3 as the default set in the configuration map
final Map>String,String> configurationMap = new HashMap>String,String>();
configurationMap.put(SwitchByKeySubjectPatternMapper.DEFAULT_MAPPINGS, "key3");
user.addSubjectMapping(SwitchByKeySubjectPatternMapper.CONFIGURATION, configurationMap);
pds.commitTransaction();
If the default set of mappings is removed, or if a non-existent set of mappings is defined as the default,
SwitchByKeySubjectPatternMapper will not map any subjects by default. If the specified set of default mappings
are then added later, the next call to switchToDefaultMappings() will make the specified set the default set.
Deploying the SwitchByKeySubjectPatternMapper to the Permissioning Auth Module
As SwitchByKeySubjectPatternMapper is included in the Permissioning Auth Module kit (it is in the
permissioning-common-xxx.jar and the permissioning-auth-module-jar-with-dependencies-xxx.jar
), you do not need to take any action to deploy it on the classpath of the Permissioning Auth Module
(it is already there).
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDeprecated.Used in calls toUser.addSubjectMapping()as the key that identifies passed in mappings as configuration settings.static final StringDeprecated.Used in calls toUser.addSubjectMapping()to identify the configuration setting for the default key mapping. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionmapSubject(String subject) Deprecated.Called by the Permissioning Auth Module to map the passed insubjectusing the current set of subject mappings.voidsetGlobalContext(GlobalContext globalContext) Deprecated.This method is a no-op asSwitchByKeySubjectPatternMapper's do not utilise data from theGlobalContext.booleanswitchMappings(String keyField, Map<String, String> fields) Deprecated.Called by the Permissioning Auth Module to switch the current set of subject mappings to the set requested by the client application.voidDeprecated.Called by the Permissioning Auth Module to switch the current set of subject mappings to the default set.voidupdateMappings(String key, Map<String, String> mappingsForKey) Deprecated.Called by the Permissioning Auth Module to add the passed in set of subject mappings to any existing sets of subject mappings.
-
Field Details
-
DEFAULT_MAPPINGS
Deprecated.Used in calls toUser.addSubjectMapping()to identify the configuration setting for the default key mapping.- See Also:
-
CONFIGURATION
Deprecated.Used in calls toUser.addSubjectMapping()as the key that identifies passed in mappings as configuration settings.- See Also:
-
-
Constructor Details
-
SwitchByKeySubjectPatternMapper
public SwitchByKeySubjectPatternMapper()Deprecated.
-
-
Method Details
-
switchMappings
Deprecated.Called by the Permissioning Auth Module to switch the current set of subject mappings to the set requested by the client application.The switch will only succeed if:
- Subject mappings for the switch key have been added at the Permissioning Auth Module as part of a Permissioning transaction.
- The end user is permitted to switch to the requested set of subject mappings.
- Specified by:
switchMappingsin interfaceSwitchableSubjectMapper- Parameters:
keyField- the name of the field that contains the switch key in the passed infieldsMap.fields- the fields of the RTTP message that requested the switch.- Returns:
- true if the switch was successfully, false otherwise.
-
switchToDefaultMappings
public void switchToDefaultMappings()Deprecated.Called by the Permissioning Auth Module to switch the current set of subject mappings to the default set.If a default is not defined, then subjects will not be mapped until the client application requests a switch and the Permissioning Auth Module calls
switchMappings.- Specified by:
switchToDefaultMappingsin interfaceSwitchableSubjectMapper
-
setGlobalContext
Deprecated.This method is a no-op asSwitchByKeySubjectPatternMapper's do not utilise data from theGlobalContext.- Specified by:
setGlobalContextin interfaceSubjectMapper- Parameters:
globalContext-
-
mapSubject
Deprecated.Called by the Permissioning Auth Module to map the passed insubjectusing the current set of subject mappings.- Specified by:
mapSubjectin interfaceSubjectMapper- Parameters:
subject- the subject of the RTTP message received by Liberator.- Returns:
- the modified subject if a mapping was found, or
nullif a mapping was not found.
-
updateMappings
Deprecated.Called by the Permissioning Auth Module to add the passed in set of subject mappings to any existing sets of subject mappings.The Permissioning Auth Module calls this method when the Permissioning DataSource adds subject mappings as part of a Permissioning transaction. Each set is added independently of the other sets, and only one set can be used as the current set.
If mappings already exist for the
keypassed to this method, then the new mappings are added to the existing mappings. If an added pattern mapping already exists for thiskey, then the new pattern mapping replaces the existing pattern mapping (much like the way thatMap.put(pattern1, suffix1)overwrites previous mappings forpattern1).- Specified by:
updateMappingsin interfaceSubjectMapper- Parameters:
key- that identifies the added set of mappings.mappingsForKey- the mappings that are added for thekeyidentifier.
-
SwitchableSubjectMapper.