Class RedisBasicSessionStore<A>

java.lang.Object
io.inverno.mod.session.AbstractSessionStore<A,Session<A>>
io.inverno.mod.session.RedisBasicSessionStore<A>
Type Parameters:
A - the session data type
All Implemented Interfaces:
BasicSessionStore<A>, SessionStore<A,Session<A>>

public class RedisBasicSessionStore<A> extends AbstractSessionStore<A,Session<A>> implements BasicSessionStore<A>

A basic session store implementation that stores sessions and their data in a Redis data store.

Sessions are stored in Redis hash containing the session attributes (i.e. creation time, maximum inactive interval...) and the session data. They are stored with a two minutes expiration buffer in order to make sure session data are still available to the limits.

Session data are stored as JSON strings, as a result the session data type must be defined in a way that enables an object mapper to read and write data.

This implementation uses a SessionDataSaveStrategy to determine whether resolved session data should be saved along with the session.

Since:
1.13
Author:
Jeremy Kuhn
  • Field Details

    • DEFAULT_KEY_PREFIX

      public static final String DEFAULT_KEY_PREFIX
      The default Redis key prefix.
      See Also:
    • FIELD_CREATION_TIME

      public static final String FIELD_CREATION_TIME
      The creation time hash field name.
      See Also:
    • FIELD_LAST_ACCESSED_TIME

      public static final String FIELD_LAST_ACCESSED_TIME
      The last accessed time hash field name.
      See Also:
    • FIELD_MAX_INACTIVE_INTERVAL

      public static final String FIELD_MAX_INACTIVE_INTERVAL
      The maximum inactive interval time hash field name.
      See Also:
    • FIELD_EXPIRATION_TIME

      public static final String FIELD_EXPIRATION_TIME
      The expiration time hash field name.
      See Also:
    • FIELD_SESSION_DATA

      public static final String FIELD_SESSION_DATA
      The data hash field name.
      See Also:
  • Method Details

    • builder

      public static <A> RedisBasicSessionStore.Builder<A> builder(RedisClient<String,String> redisClient, com.fasterxml.jackson.databind.ObjectMapper mapper, Class<A> sessionDataType)

      Creates a Redis basic session store builder using SessionIdGenerator.uuid() session id generator.

      Type Parameters:
      A - the session data type
      Parameters:
      redisClient - a Redis client
      mapper - an object mapper
      sessionDataType - the session data type
      Returns:
      a Redis basic session store builder
    • builder

      public static <A> RedisBasicSessionStore.Builder<A> builder(RedisClient<String,String> redisClient, com.fasterxml.jackson.databind.ObjectMapper mapper, Class<A> sessionDataType, SessionIdGenerator<A,Session<A>> sessionIdGenerator)

      Creates a Redis basic session store builder.

      Type Parameters:
      A - the session data type
      Parameters:
      redisClient - a Redis client
      mapper - an object mapper
      sessionDataType - the session data type
      sessionIdGenerator - a session id generator
      Returns:
      a Redis basic session store builder
    • builder

      public static <A> RedisBasicSessionStore.Builder<A> builder(RedisClient<String,String> redisClient, com.fasterxml.jackson.databind.ObjectMapper mapper, Type sessionDataType)

      Creates a Redis basic session store builder using SessionIdGenerator.uuid() session id generator.

      Type Parameters:
      A - the session data type
      Parameters:
      redisClient - a Redis client
      mapper - an object mapper
      sessionDataType - the session data type
      Returns:
      a Redis basic session store builder
    • builder

      public static <A> RedisBasicSessionStore.Builder<A> builder(SessionIdGenerator<A,Session<A>> sessionIdGenerator, RedisClient<String,String> redisClient, com.fasterxml.jackson.databind.ObjectMapper mapper, Type sessionDataType)

      Creates a Redis basic session store builder.

      Type Parameters:
      A - the session data type
      Parameters:
      sessionIdGenerator - a session id generator
      redisClient - a Redis client
      mapper - an object mapper
      sessionDataType - the session data type
      Returns:
      a Redis basic session store builder
    • getSessionIdGenerator

      public SessionIdGenerator<A,Session<A>> getSessionIdGenerator()
      Description copied from class: AbstractSessionStore

      Returns the session id generator.

      Overrides:
      getSessionIdGenerator in class AbstractSessionStore<A,Session<A>>
      Returns:
      the session id generator
    • getKeyPrefix

      public String getKeyPrefix()

      Returns the session Redis key prefix.

      Returns:
      the session key prefix
    • create

      public Mono<Session<A>> create()
      Description copied from interface: SessionStore

      Creates a new session in the session store.

      This shall physically create a new session in the data store.

      Specified by:
      create in interface SessionStore<A,Session<A>>
      Returns:
      a mono for creating a session
    • get

      public Mono<Session<A>> get(String sessionId)
      Description copied from interface: SessionStore

      Returns the session identified by the specified session id.

      Specified by:
      get in interface SessionStore<A,Session<A>>
      Parameters:
      sessionId - a session id
      Returns:
      a mono emitting the session or an empty mono if no session exists with the specified identifier
    • getData

      public Mono<A> getData(String sessionId)
      Description copied from interface: SessionStore

      Returns the data of the session identified by the specified session id.

      Specified by:
      getData in interface SessionStore<A,Session<A>>
      Parameters:
      sessionId - a session id
      Returns:
      a mono emitting the session data or an empty mono if no session exists with specified identifier or if a session exists which does not define any data
    • move

      public Mono<Void> move(String sessionId, String newSessionId) throws IllegalStateException
      Description copied from interface: SessionStore

      Moves the session identified by the specified identifier to a new identifier.

      Specified by:
      move in interface SessionStore<A,Session<A>>
      Parameters:
      sessionId - a session id
      newSessionId - a new session id
      Returns:
      a mono for moving a session
      Throws:
      IllegalStateException - if there is no session with the specified identifier or if a session already exists at the specified new identifier
    • remove

      public Mono<Void> remove(String sessionId)
      Description copied from interface: SessionStore

      Removes the session identified by the specified identifier.

      Specified by:
      remove in interface SessionStore<A,Session<A>>
      Parameters:
      sessionId - a session id
      Returns:
      a mono for removing a session
    • save

      Description copied from interface: SessionStore

      Saves the specified session.

      Whether resolved session data are saved along with the session is implementation specific. Implementors must however at least guarantee that data that is explicitly set on a session using Session.setData(Object) are saved.

      Specified by:
      save in interface SessionStore<A,Session<A>>
      Parameters:
      session - a session
      Returns:
      a mono for saving a session
      Throws:
      IllegalArgumentException - if the specified session does not originate from this session store
      IllegalStateException - if the specified session does not exist in the store or if it was invalidated