This is a quick post which points out how to share contextual user-defined (custom) data between JAX-RS filters.

Filter execution

  • It is chain based: one filter gets executed after another
  • Request filters are executed before Response filters
  • If a filter throws an exception, the chain breaks and other filters are skipped i.e. an exception from a Request filter will auto-abort all other Request filters. The same is applicable to Response filters.

For more info, please do check out one of my existing blog posts which discussed JAX-RS server side processing pipeline in depth

Sharing data b/w filters

JAX-RS API enables sharing of user-defined data amongst filters associated with a particular request

  • It is abstracted in the form of a Map<String,Object> (pretty natural choice) via the ContainerRequestContext interface
  • Get all the custom properties using the getPropertyNames() method
  • The value of a specific property can be fetched (from the Map) using getProperty(String name)
  • Overwrite an existing property or a add a new one using setProperty(String name, Object val).

Examples

Here is how multiple Request filters can share user-defined contextual data amongst themselves:

https://gist.github.com/abhirockzz/bdb0f98fe68c148f97d2#file-sharingdataamongrequestfilters-java

Another example where a Response filter uses the contextual data set by a Request filter:

To be noted…

The same capability is available in the Client side JAX-RS filters as well. The only difference is that you would be interacting with an instance of the ClientRequestContext

Further reading

 

Sharing Data Between JAX-RS Filters

| Java Language| 461 views | 0 Comments
About The Author
- • Consultant - Identity & Access Management • Java language and platform fanatic

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>