blob: 768e6bc27309f1f02e0a1b6962b52772bc91ee55 [file] [view]
---
layout: default
title: Cookie Interceptor
parent:
title: Interceptors
url: interceptors.html
---
# Cookie Interceptor
The aim of this interceptor is to set values in the stack/action based on cookie name/value of interest.
If an asterisk is present in `cookiesName` parameter, it will be assume that all cookies name are to be injected into
struts' action, even though `cookiesName` is comma-separated by other values, e.g. `(cookie1,*,cookie2)`.
If `cookiesName` is left empty it will assume that no cookie will be injected into Struts' action.
If an asterisk is present in `cookiesValue` parameter, it will assume that all cookies name irrespective of its value
will be injected into Struts' action so long as the cookie name matches those specified in `cookiesName` parameter.
If `cookiesValue` is left empty it will assume that all cookie that match the `cookieName` parameter will be injected
into Struts' action.
The action could implement `CookiesAware` in order to have a `Map` of filtered cookies set into it.
## Parameter Authorization
Cookie values are injected through the same `@StrutsParameter` authorization path
as the [Parameters Interceptor](parameters-interceptor.html) (previously the
interceptor wrote directly to the value stack and bypassed authorization).
> **Behaviour change in 7.2.0:** when annotation enforcement is active (the
> default `struts.parameters.requireAnnotations=true`), cookies will only populate
> setters marked with [`@StrutsParameter`](struts-parameter-annotation.html).
> Applications that relied on cookies populating un-annotated setters must either
> add the annotation to those setters or stop using `cookiesName=*`.
{:.alert .alert-warning}
## Parameters
- `cookiesName` (mandatory) - Name of cookies to be injected into the action. If more than one cookie name is desired
it could be comma-separated. If all cookies name is desired, it could simply be *, an asterisk. When many cookies
name are comma-separated either of the cookie that match the name in the comma-separated list will be qualified.
- `cookiesValue` (mandatory) - Value of cookies that if its name matches cookieName attribute and its value matched
this, will be injected into Struts' action. If more than one cookie name is desired it could be comma-separated.
If left empty, it will assume any value would be ok. If more than one value is specified (comma-separated) it will
assume a match if either value is matched.
- `acceptCookieNames` (optional) - Pattern used to check if name of cookie matches the provided pattern.
## Extending the Interceptor
- `populateCookieValueIntoStack` - this method will decide if this cookie value is qualified to be populated into
the value stack (hence into the action itself)
- `injectIntoCookiesAwareAction` - this method will inject selected cookies (as a `java.util.Map`) into action
that implements `CookiesAware`.
## Examples
```xml
<!--
This example will inject cookies named either 'cookie1' or 'cookie2' whose
value could be either 'cookie1value' or 'cookie2value' into Struts' action.
-->
<action ... >
<interceptor-ref name="cookie">
<param name="cookiesName">cookie1, cookie2</param>
<param name="cookiesValue">cookie1value, cookie2value</param>
</interceptor-ref>
....
</action>
<!--
This example will inject cookies named either 'cookie1' or 'cookie2'
regardless of their value into Struts' action.
-->
<action ... >
<interceptor-ref name="cookie">
<param name="cookiesName">cookie1, cookie2</param>
<param name="cookiesValue">*</param>
<interceptor-ref>
...
</action>
<!--
This example will inject cookies named either 'cookie1' with value
'cookie1value' or 'cookie2' with value 'cookie2value' into Struts'
action.
-->
<action ... >
<interceptor-ref name="cookie">
<param name="cookiesName">cookie1</param>
<param name="cookiesValue">cookie1value</param>
</interceptor-ref>
<interceptor-ref name="cookie">
<param name="cookiesName"<cookie2</param>
<param name="cookiesValue">cookie2value</param>
</interceptor-ref>
....
</action>
<!--
This example will inject any cookies regardless of its value into
Struts' action.
-->
<action ... >
<interceptor-ref name="cookie">
<param name="cookiesName">*</param>
<param name="cookiesValue">*</param>
</interceptor-ref>
...
</action>
```