Package net.shibboleth.idp.profile.audit.impl

# Class PopulateAuditContext

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.profile.action.AbstractConditionalProfileAction
net.shibboleth.idp.profile.AbstractProfileAction
net.shibboleth.idp.profile.audit.impl.PopulateAuditContext

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`, `Aware`, `MessageSource`, `MessageSourceAware`, `Action`

public class PopulateAuditContext extends AbstractProfileAction
Action that populates fields in an `AuditContext` using injected functions.

Each function is registered against a field specifier, and the result of the function is added to that field in the context's map. This reduces the code footprint required to implement, and extend, the fields logged, instead of requiring a dedicated action for a particular field or set of fields.

The eventual map of formatting strings is also provided in order to recognize which extractors actually need to be run.

Event:
  `EventIds.PROCEED_EVENT_ID`, `EventIds.INVALID_PROFILE_CTX`

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`PopulateAuditContext.FormattingMapParser`
Parser for the formatting strings that exposes a final set of field labels that are present in any of the input formatters.

## Field Summary

Fields
Modifier and Type
Field
Description
`private Function<ProfileRequestContext,AuditContext>`
`auditContextCreationStrategy`
Strategy used to locate or create the `AuditContext` to populate.
`private AuditContext`
`auditCtx`
`AuditContext` to populate.
`private boolean`
`clearAuditContext`
Flag signalling to clear context on entry.
`private DateTimeFormatter`
`dateTimeFormatter`
Formatter for date/time fields.
`private Map<String,Function<ProfileRequestContext,Object>>`
`fieldExtractors`
Map of fields to extract and the corresponding extraction functions.
`private Map<String,String>`
`fieldReplacements`
Map allowing substitutions of values during field extraction.
`private Set<String>`
`fieldsToExtract`
Fields being audited, to optimize extraction..
`private final org.slf4j.Logger`
`log`
Class logger.
`private boolean`
`useDefaultTimeZone`
Convert date/time fields to default time zone.

## Constructor Summary

Constructors
Constructor
Description
`PopulateAuditContext()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private void`
`addField(String key, Object value)`
Add a non-null field to the audit record.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext)`
`protected void`
`doInitialize()`
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext)`
`void`
`setAuditContextCreationStrategy(Function<ProfileRequestContext,AuditContext> strategy)`
Set the strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.
`void`
`setClearAuditContext(boolean flag)`
Sets whether to clear any existing fields from the audit context.
`void`
`setDateTimeFormat(String format)`
Set the formatting string to apply when extracting date/time fields.
`void`
`setFieldExtractors(Map<String,Function<ProfileRequestContext,Object>> map)`
Set the map of fields and extraction functions to run.
`void`
`setFieldReplacements(Map<String,String> map)`
Set the map of field values to replace, and the replacement values.
`void`
`setFormattingMapParser(PopulateAuditContext.FormattingMapParser parser)`
Set the parsed map of logging category to formatting strings for log entries.
`void`
`setUseDefaultTimeZone(boolean flag)`
Convert date/time fields to default time zone.

### Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction

`doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy`

### Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction

`getActivationCondition, setActivationCondition`

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### auditContextCreationStrategy

@Nonnull private Function<ProfileRequestContext,AuditContext> auditContextCreationStrategy
Strategy used to locate or create the `AuditContext` to populate.

### fieldExtractors

@Nonnull private Map<String,Function<ProfileRequestContext,Object>> fieldExtractors
Map of fields to extract and the corresponding extraction functions.

### fieldsToExtract

@Nonnull private Set<String> fieldsToExtract
Fields being audited, to optimize extraction..

### fieldReplacements

@Nonnull private Map<String,String> fieldReplacements
Map allowing substitutions of values during field extraction.

### dateTimeFormatter

@Nonnull private DateTimeFormatter dateTimeFormatter
Formatter for date/time fields.

### useDefaultTimeZone

private boolean useDefaultTimeZone
Convert date/time fields to default time zone.

### clearAuditContext

private boolean clearAuditContext
Flag signalling to clear context on entry.

### auditCtx

@NonnullBeforeExec private AuditContext auditCtx
`AuditContext` to populate.

## Constructor Details

### PopulateAuditContext

public PopulateAuditContext()
Constructor.

## Method Details

### setAuditContextCreationStrategy

public void setAuditContextCreationStrategy(@Nonnull Function<ProfileRequestContext,AuditContext> strategy)
Set the strategy used to locate the `AuditContext` associated with a given `ProfileRequestContext`.

Parameters:
  `strategy` - lookup strategy

### setFieldExtractors

public void setFieldExtractors(@Nonnull Map<String,Function<ProfileRequestContext,Object>> map)
Set the map of fields and extraction functions to run.

Parameters:
  `map` - map from field name to extraction function

### setFormattingMapParser

public void setFormattingMapParser(@Nonnull PopulateAuditContext.FormattingMapParser parser)
Set the parsed map of logging category to formatting strings for log entries.

A formatting string consists of tokens prefixed by '%' separated by any non-alphanumeric or whitespace. Tokens can contain any letter or number or a hyphen. Anything other than a token, including whitespace, is a literal.

The input class exposes the parsed field data for efficiency.

Parameters:
  `parser` - the parsed map

### setFieldReplacements

public void setFieldReplacements(@Nullable Map<String,String> map)
Set the map of field values to replace, and the replacement values.

Parameters:
  `map` - map of replacements

### setDateTimeFormat

public void setDateTimeFormat(@Nullable @NotEmpty String format)
Set the formatting string to apply when extracting date/time fields.

Parameters:
  `format` - formatting string

### setUseDefaultTimeZone

public void setUseDefaultTimeZone(boolean flag)
Convert date/time fields to default time zone.

Parameters:
  `flag` - flag to set

### setClearAuditContext

public void setClearAuditContext(boolean flag)
Sets whether to clear any existing fields from the audit context.

Defaults to false.

Parameters:
  `flag` - flag to set
Since:
  4.3.0

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractInitializableComponent`
Throws:
  `ComponentInitializationException`

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doPreExecute` in class `AbstractConditionalProfileAction`

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doExecute` in class `AbstractProfileAction`

### addField

private void addField(@Nonnull @NotEmpty String key, @Nullable Object value)
Add a non-null field to the audit record.

Parameters:
  `key` - field label
  `value` - value to add