Binding Strategies for JAX-RS Filters and Interceptors
Target JAX-RS filters and interceptors with named and dynamic binding.
Join the DZone community and get the full member experience.
Join For FreeJAX-RS 2.0 defines multiple ways that server-side filters and interceptors can be bound to their target components.
- Global Binding
- Named Binding
- Dynamic Binding
Global Binding
By default, JAX-RS filters and interceptors are bound to all the methods of resource classes in an application. That is, both request (pre and post) and response filters will be invoked whenever any resource method is invoked in response to an HTTP request by the client. This convention can be overridden using named binding or dynamic binding.
Named Binding
Filters and interceptors scoping can be handled in a fine-grained manner (based on per resource class/method):
// Step 1: Define a custom annotation with the @NamedBinding annotation
@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Audited { }
// Step 2: Apply the custom annotation on the filter or interceptor
@Provider
@Audited
public class AuditFilter implements ContainerRequestFilter {
//filter implementation....
}
// Step 3: Apply the same annotation to the required resource class or method
@GET
@Path("{id}")
@Produces("application/json")
@Audited
public Response find(@PathParam("id") String custId){
//search and return customer info
}
Note: If it is applied to a class, the filter/interceptor will be bound to all its resource methods.
Dynamic Binding
JAX-RS provides the DynamicFeature interface to help bind filters and interceptors dynamically at runtime. They can be used in tandem with the most static way of binding made possible using @NamedBinding:
public interface DynamicFeature {
public void configure(ResourceInfo resInfo, FeatureContext ctx);
}
The injected instance of the ResourceInfo interface helps you choose the resource method in a dynamic fashion by exposing various methods, and the FeatureContext interface allows us to register the filter or interceptor once the resource method has been selected.
For more on JAX-RS 2.0…
- Check out the specification doc
- One of the articles in the latest Java Magazine edition
Cheers!
Published at DZone with permission of Abhishek Gupta, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments