Package org.springframework.web.method.annotation

# 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 Summary

Fields
Modifier and Type
Field
Description
`static final String`
`SESSION_KNOWN_ATTRIBUTE`
Key for known-attribute-names storage (a String array) as a session attribute.

## Constructor Summary

Constructors
Constructor
Description
`SessionAttributesHandler(Class<?> handlerType, SessionAttributeStore sessionAttributeStore)`
Create a new session attributes handler.

## Method Summary

Modifier and Type
Method
Description
`void`
`cleanupAttributes(WebRequest request)`
Remove "known" attributes from the session, i.e.
`boolean`
`hasSessionAttributes()`
Whether the controller represented by this instance has declared any session attributes through an `SessionAttributes` annotation.
`boolean`
`isHandlerSessionAttribute(String attributeName, Class<?> attributeType)`
Whether the attribute name or type match the names and types specified via `@SessionAttributes` on the underlying controller.
`Map<String,Object>`
`retrieveAttributes(WebRequest request)`
Retrieve "known" attributes from the session, i.e.
`void`
`storeAttributes(WebRequest request, Map<String,?> attributes)`
Store a subset of the given attributes in the session.

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

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

## 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