Sharing Data Between JAX-RS Filters

DZone 's Guide to

Sharing Data Between JAX-RS Filters

A straight and to the point post on JAX-RS filters. Great for anyone using the popular standard for their REST services.

· Java Zone ·
Free Resource

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 add a new one using setProperty(String name, Object val)


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

Another example where a Response filter uses the contextual dataset 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

Cheers !

This entry was posted in Java EE and tagged filters, javaee7, JAX-RS 2.0, REST. Bookmark the permalink.
java, jax rs, jax-rs

Published at DZone with permission of Abhishek Gupta , DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}