Sharing data between JAX-RS filters

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)


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

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

Cheers !

About Abhishek

Currently working as a Senior Product Manager in the Oracle Cloud Application Development team with a focus on Oracle Cloud PaaS portfolio. When not hovering in the clouds, I stay grounded with Java EE
This entry was posted in Java EE and tagged , , , . Bookmark the permalink.

4 Responses to Sharing data between JAX-RS filters

  1. Tushar Goel says:

    HI Abhishek, thanks for the article. You have written 3 filter classes and in 2 of them you set some value and in 3rd one you get some value. You have also mentioned that filters are also working in a chain but i am unable to understand that how does JAX-RS know which filter to be executed first. You can have chaining start from any filter. But in your example, it should started from 1, 2 and 3. Could you plz explain?


  2. Pingback: JSON Web Token in action with JAX-RS | Thinking in Java EE (at least trying to!)

  3. Pingback: JSON Web Token in Action with JAX-RS | Voxxed

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s