Class SessionAttributesHandler

java.lang.Object
org.springframework.web.method.annotation.SessionAttributesHandler

public class SessionAttributesHandler extends Object
Manages controller-specific session attributes declared via @SessionAttributes. Actual storage is delegated to a SessionAttributeStore instance.

When a controller annotated with @SessionAttributes adds attributes to its model, those attributes are checked against names and types specified via @SessionAttributes. Matching model attributes are saved in the HTTP session and remain there until the controller calls SessionStatus.setComplete().

Since:
3.1
Author:
Rossen Stoyanchev, Juergen Hoeller
  • Field Details

    • SESSION_KNOWN_ATTRIBUTE

      public static final String SESSION_KNOWN_ATTRIBUTE
      Key for known-attribute-names storage (a String array) as a session attribute.

      This is necessary for consistent handling of type-based session attributes in distributed session scenarios where handler methods from the same class may get invoked on different servers.

      Since:
      6.1.4
  • Constructor Details

    • SessionAttributesHandler

      public SessionAttributesHandler(Class<?> handlerType, SessionAttributeStore sessionAttributeStore)
      Create a new session attributes handler. Session attribute names and types are extracted from the @SessionAttributes annotation, if present, on the given type.
      Parameters:
      handlerType - the controller type
      sessionAttributeStore - used for session access
  • Method Details

    • hasSessionAttributes

      public boolean hasSessionAttributes()
      Whether the controller represented by this instance has declared any session attributes through an SessionAttributes annotation.
    • isHandlerSessionAttribute

      public boolean isHandlerSessionAttribute(String attributeName, Class<?> attributeType)
      Whether the attribute name or type match the names and types specified via @SessionAttributes on the underlying controller.

      Attributes successfully resolved through this method are "remembered" and subsequently used in retrieveAttributes(WebRequest) and cleanupAttributes(WebRequest).

      Parameters:
      attributeName - the attribute name to check
      attributeType - the type for the attribute
    • storeAttributes

      public void storeAttributes(WebRequest request, Map<String,?> attributes)
      Store a subset of the given attributes in the session. Attributes not declared as session attributes via @SessionAttributes are ignored.
      Parameters:
      request - the current request
      attributes - candidate attributes for session storage
    • retrieveAttributes

      public Map<String,Object> retrieveAttributes(WebRequest request)
      Retrieve "known" attributes from the session, i.e. attributes listed by name in @SessionAttributes or attributes previously stored in the model that matched by type.
      Parameters:
      request - the current request
      Returns:
      a map with handler session attributes, possibly empty
    • cleanupAttributes

      public void cleanupAttributes(WebRequest request)
      Remove "known" attributes from the session, i.e. attributes listed by name in @SessionAttributes or attributes previously stored in the model that matched by type.
      Parameters:
      request - the current request