All Known Implementing Classes:
AbstractUserProvider, DelegatingUserProvider, NoOpUserProvider

public interface UserProvider
Service interface for managing User identities in Flux Capacitor.

A UserProvider is responsible for extracting, resolving, and injecting user identity information into messages. It enables user-aware processing by:

  • Resolving the current authenticated User
  • Looking up users by ID or from message metadata
  • Storing user metadata into messages for downstream correlation

Implementations of this interface can be registered via Java’s ServiceLoader. When multiple implementations are found, they are combined using andThen(UserProvider).

See Also:
  • Field Details

    • defaultUserProvider

      static final UserProvider defaultUserProvider
      Default UserProvider discovered via ServiceLoader. If multiple providers are found, they are chained using andThen(UserProvider). May be null if no provider is registered.
  • Method Details

    • getActiveUser

      default User getActiveUser()
      Returns the currently active user, typically injected by the current context.
      Returns:
      the active User, or User.getCurrent() if not explicitly provided
    • getUserById

      User getUserById(Object userId)
      Retrieves a User by their unique ID.
      Parameters:
      userId - an identifier for the user, usually a string or numeric value
      Returns:
      the corresponding User, or null if no match is found
    • getSystemUser

      User getSystemUser()
      Returns the User representing the system (non-human) identity. Typically used for scheduled messages, internal services, etc.
    • fromMessage

      User fromMessage(HasMessage message)
      Extracts the User from a given HasMessage instance. Implementations may inspect message metadata or payload to resolve the user identity.
      Parameters:
      message - the message containing potential user-related metadata
      Returns:
      the resolved User, or null if no user info was found
    • containsUser

      boolean containsUser(Metadata metadata)
      Checks if the given metadata contains user information that can be resolved by this provider.
      Parameters:
      metadata - the metadata to inspect
      Returns:
      true if the metadata contains recognizable user information
    • removeFromMetadata

      Metadata removeFromMetadata(Metadata metadata)
      Removes any user-related metadata entries from the given Metadata.
      Parameters:
      metadata - the metadata to clean
      Returns:
      a new Metadata instance without any user-specific keys
    • addToMetadata

      default Metadata addToMetadata(Metadata metadata, User user)
      Adds user-related metadata to a message, overwriting existing values if present.
      Parameters:
      metadata - the original metadata
      user - the user whose info should be added
      Returns:
      new metadata including the user identity
    • addToMetadata

      Metadata addToMetadata(Metadata metadata, User user, boolean ifAbsent)
      Adds user-related metadata to a message.
      Parameters:
      metadata - the original metadata
      user - the user to include
      ifAbsent - if true, metadata is only added if not already present
      Returns:
      updated Metadata with user info conditionally added
    • andThen

      default UserProvider andThen(UserProvider other)
      Combines this provider with another.

      The returned provider will try this provider first, falling back to other if a user cannot be resolved. This is useful for composing multiple resolution strategies.

      Parameters:
      other - another user provider to chain after this one
      Returns:
      a new UserProvider that delegates to both providers