Expresso 5-6

com.jcorporate.expresso.services.dbobj
Class SecurityDBObject

java.lang.Object
  extended bycom.jcorporate.expresso.core.dataobjects.BaseDataObject
      extended bycom.jcorporate.expresso.core.dataobjects.jdbc.JDBCDataObject
          extended bycom.jcorporate.expresso.core.dbobj.DBObject
              extended bycom.jcorporate.expresso.core.dbobj.SecuredDBObject
                  extended bycom.jcorporate.expresso.services.dbobj.SecurityDBObject
All Implemented Interfaces:
Cacheable, ContextNested, DataObject, LookupInterface, Securable, Serializable
Direct Known Subclasses:
ControllerSecurity, DBObjSecurity, DefaultUserInfo, GroupMembers, GroupNest, JobSecurity, TmpUser, UserGroup, UserPreference, UserPreferenceDef

public abstract class SecurityDBObject
extends SecuredDBObject

SecurityDBObject.java

this object provides a means to control the DB context via Setup values. subclasses will ignore any context except that found in Setup.

You probably will never create a subclass of SecurityDBObject yourself--it is a framework tool embedded in the Expresso security system. The idea is to provide a flexible way to redirect authentication classes to another database context. For example, consider a situation where there are two Expresso applications, and you wanted the second application to rely on the first in order to authenticate users and otherwise supply user information. The following classes extend SecurityDBObject in Expresso:

SecurityDBObject provides a means to control the DB context (for some or all of the classes listed above) via Setup values. Two Setup values are important for SecurityDBObject: SecurityDB -- Database to use for User/Group Security Info SecurityDBObjs -- Database Objects that should use the 'fixed' context found in the SecurityDB parameter

If these Setup values are empty, SecurityDBObject does nothing special. However, if these 2 Setup values contain meaningful info, subclasses of SecurityDBObject may ignore any DB context supplied (e.g., they can ignore a context like 'default' that comes from the ControllerRequest). The logic is two-fold: the Setup value SecurityDB must be filled, AND the Setup value SecurityDBObjs must contain the fully-qualified class name of all objects (from the list of SecurityDBObject subclasses listed above) that will use the 'fixed' context value in Setup value SecurityDB. That's a bit tricky, so to repeat: even though all the security classes listed above are instances of SecurityDBObject, each one will use the fixed context only if that individual class is also listed in the Setup value, SecurityDBObjs.

This scheme is useful in at least one case: one primary Expresso application supplying User information to a secondary Expresso application.

LIMITATION: user info and group membership changed on the primary, UserInfo application will not trigger a cache cleaning on the secondary system. So when these memberships are changed, manually clean the cache on the secondary system via admin pages, or by restarting.

As always, this sample may not be representative of your needs, so attempt this only with caution and a single-step debugger handy.

Author:
Michael Nash
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class com.jcorporate.expresso.core.dbobj.DBObject
DBObject.FieldError, DBObject.FieldUpdate
 
Field Summary
static String SECURITY_CONTEXT
           
static String SECURITY_OBJECTS
           
 
Fields inherited from class com.jcorporate.expresso.core.dbobj.SecuredDBObject
ADD, ALL_FUNCTIONS, CACHE_NAME, CACHE_TTY, DELETE, SEARCH, SYSTEM_ACCOUNT, SYSTEM_ACCOUNT_NAME, UPDATE
 
Fields inherited from class com.jcorporate.expresso.core.dbobj.DBObject
ATTRIBUTE_ERROR, ATTRIBUTE_ERROR_MESSAGE, ATTRIBUTE_PAGE_LIMIT, BIG_DECIMAL_ZERO, EMAIL_MASK, EVENT_ADD, EVENT_DELETE, EVENT_UPDATE, FLOAT_MASK, INT_MASK, IS_CHECK_RELATIONAL_INTEGRITY, UPDATE_CHANGED_ONLY, WHERE_KEYWORD
 
Fields inherited from class com.jcorporate.expresso.core.dataobjects.jdbc.JDBCDataObject
anyFieldsDistinct, anyFieldsToRetrieve, appendCustomWhere, caseSensitiveQuery, customWhereClause, dbKey, distinctFields, localConnection, LONGBINARY_READ_DEFAULT_SIZE, maxRecords, myClassName, myUpdates, offsetRecord, recordSet, retrieveFields, sMetadataMap, sortKeys
 
Fields inherited from class com.jcorporate.expresso.core.dataobjects.BaseDataObject
currentStatus, globalMask
 
Fields inherited from interface com.jcorporate.expresso.core.dataobjects.DataObject
STATUS_CURRENT, STATUS_DELETED, STATUS_NEW, STATUS_UPDATED
 
Constructor Summary
SecurityDBObject()
           
SecurityDBObject(int uid)
          Use over (String) constructor.
SecurityDBObject(RequestContext request)
          For using DBObjects within Controllers.
 
Method Summary
protected  void overrideDataContext(String newContext)
          when someone tries to set a new data context, check with Setup values to see if this new context should be ignored, such as when a SecurityDBObject subclass is listed in the set of SecurityDBObjs (a list configurable as a Setup param).
 void setDataContext(String newContext)
          Override of DBObject's setDataContext() to call setDBName
 void setDBName(String newContext)
          Ignore the newContext parameter if Setup values indicate to do this.
 
Methods inherited from class com.jcorporate.expresso.core.dbobj.SecuredDBObject
add, canRequesterAdd, canRequesterDelete, canRequesterRead, canRequesterUpdate, checkAllowed, copyAttributes, count, createSecurityCache, delete, deleteAll, find, getRequestingUid, getString, getString, getString, getString, getString, getString, getSystemUid, instantiate, isAllowed, retrieve, search, searchAndRetrieveList, searchAndRetrieveList, setRequestingUid, update
 
Methods inherited from class com.jcorporate.expresso.core.dbobj.DBObject
addDetail, addField, addField, addFieldError, addFoundKeys, addIfNeeded, addIndex, addKey, addOrUpdate, addSortKey, addTransition, addVirtualField, addVirtualField, addVirtualField, addVirtualField, average, basicAdd, cacheIsChangedComparison, checkAllReferredToBy, checkAllRefs, checkAllRefsPublic, checkDeleteDetailPerm, checkField, checkRef, checkRef, clear, clearDistinctFields, clearError, clearFieldsToRetrieve, clearSortKeys, containsWildCards, delete, deleteAll, deleteDetails, denotesRange, equals, forKey, formatDateTime, get, getAllAttributes, getAttribute, getAttributesIterator, getBooleanFieldValue, getCacheSize, getCacheStatsMap, getCacheUtil, getCheckZeroUpdate, getCustomWhereClause, getDataContext, getDataField, getDataTransferObject, getDBName, getDetails, getDistinctFieldCount, getDistinctFields, getField, getFieldBigDecimal, getFieldBoolean, getFieldByte, getFieldByteArray, getFieldData, getFieldDate, getFieldDecimalFormatted, getFieldDouble, getFieldErrorMessage, getFieldFloat, getFieldInt, getFieldLong, getFieldMetaData, getFieldShort, getFieldsToRetrieveCount, getFilterClass, getFoundCount, getFoundKeysArray, getIndexArray, getISOValuesDefault, getISOValuesDefault, getISOValuesDefault, getKey, getKeyFieldListIterator, getLength, getLengthInt, getLocalConnection, getLocale, getLogger, getLookupObject, getMax, getMax, getMaxRecords, getMyKeys, getMyUpdatesArray, getOffsetRecord, getPatternMatcher, getPrecision, getSerializedForm, getStringFilter, getThisDBbj, getThisDBObj, getValidValueDescrip, getValidValues, getValidValuesList, getValues, getValuesDefault, getValuesDefault, getValuesDefault, hasError, hasErrors, haveAllKeys, initialize, isCached, isChanged, isDistinct, isEmpty, isFieldDistinct, isFieldNull, isFieldsToRetrieve, isFieldToRetrieve, isMultiValued, isReadOnly, isSecret, isVirtual, loadFromConnection, logChange, max, min, newInstance, noNewLine, noQuotes, notifyListeners, populateDefaultValues, referredToBy, removeAttribute, removeFromCache, retrieveFromCache, saveBinaryField, search, set, setAttribute, setCacheSize, setCharset, setCheckZeroUpdate, setConnection, setConnection, setCustomWhereClause, setCustomWhereClause, setDataField, setDataTransferObject, setDefaultValue, setDescription, setField, setField, setField, setField, setField, setField, setField, setField, setField, setField, setFieldData, setFieldData, setFieldDistinct, setFieldsToRetrieve, setFilterClass, setFilterClass, setKeys, setLocale, setLookupField, setLookupObject, setMask, setMaxRecords, setMultiValued, setName, setOffsetRecord, setReadOnly, setSchema, setSecret, setSortKey, setStringFilter, setStringFiltersOnAll, setTargetDbSchema, setTargetTable, setupFields, sqlAggrFunction, sum, toDebugString, update, updateAll, updateAll, verify
 
Methods inherited from class com.jcorporate.expresso.core.dataobjects.jdbc.JDBCDataObject
addInParam, addOutParam, buildWhereClause, buildWhereClauseBuffer, checkZeroUpdate, constructNewMetaData, createAndExecuteSearch, createAndRunStoreProcedure, getConnectionPool, getCustomStringFieldValue, getDef, getDistinctFieldArrayList, getExecutor, getFieldsToRetrieveIterator, getJDBCMetaData, getJDBCUtil, getMappedDataContext, getMetaData, getQueryInterface, getSerialForm, loadFromConnection, makeLimitationStub, quoteIfNeeded, runStoredProcedure, runStoredProcedureAndRetrieveList, selectFieldString, setCaseSensitiveQuery, setDBConnectionPool, setMappedDataContext, setOriginalDBName, setTargetStoreProcedure
 
Methods inherited from class com.jcorporate.expresso.core.dataobjects.BaseDataObject
getGlobalMask, getStatus, isGlobalMasked, setFieldsWithDefaults, setGlobalMask, setStatus
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SECURITY_CONTEXT

public static final String SECURITY_CONTEXT
See Also:
Constant Field Values

SECURITY_OBJECTS

public static final String SECURITY_OBJECTS
See Also:
Constant Field Values
Constructor Detail

SecurityDBObject

public SecurityDBObject()
                 throws DBException

SecurityDBObject

public SecurityDBObject(int uid)
                 throws DBException
Use over (String) constructor. Initializes the object in the context of the user who's uid belongs to the parameter.

Parameters:
uid - the Uid of the user context
Throws:
DBException - if there's an initialization problem

SecurityDBObject

public SecurityDBObject(RequestContext request)
                 throws DBException
For using DBObjects within Controllers. Initializes based upon the current user and the requested db. [Of course this can be modified later]

Parameters:
request - - The controller request handed to you by the framework.
Throws:
DBException - if there's an error constructing the object
Method Detail

setDataContext

public void setDataContext(String newContext)
Override of DBObject's setDataContext() to call setDBName

Specified by:
setDataContext in interface ContextNested
Overrides:
setDataContext in class DBObject
Parameters:
newContext - the new dataContext to use

setDBName

public void setDBName(String newContext)
               throws DBException
Ignore the newContext parameter if Setup values indicate to do this. In other words, when someone tries to set a new data context, check with Setup values to see if this SecurityDBObject subclass is listed in the set of SecurityDBObjs (a list configurable as a Setup param).

Warning: calls super.setDBName(), which could loop back recursively if the superclass then creates objects which get db context set.

Overrides:
setDBName in class JDBCDataObject
Parameters:
newContext - the new dataContext to use
Throws:
DBException - upon construction error.

overrideDataContext

protected void overrideDataContext(String newContext)
when someone tries to set a new data context, check with Setup values to see if this new context should be ignored, such as when a SecurityDBObject subclass is listed in the set of SecurityDBObjs (a list configurable as a Setup param).

Parameters:
newContext - the new data context to use.

Expresso 5-6

Please see www.jcorporate.com for information about new Expresso releases.