StephenWithAPh1986 StephenWithAPh1986 -4 years ago 225
Java Question

Jersey Request Filter only on certain URI

I am trying to do some validation on requests coming into my service using the

. Everything is working fine, however there is one problem - every single request gets pass through the filters, even though some of the filters will never apply to them (one filter only validates on ResourceOne, another only on ResourceTwo etc.)

Is there a way to set a filter only to be invoked on a request under certain conditions?

While it is not a blocker or hindrance, it would be nice to be able to stop this kind of behaviour :)

Answer Source

I assume that You are using Jersey 2.x (implementation for JAX-RS 2.0 API).

You have two ways to achieve Your goal.

1. Use Name bindings:

1.1 Create custom annotation annotated with @NameBinding:

@Target({ElementType.METHOD, ElementType.TYPE})
public @interface AnnotationForResourceOne {}

1.2. Create filter with Your annotation:

public class ResourceOneFilter implements ContainerRequestFilter {

1.3. And bind created filter with selected resource method:

public class Resources {
    public String getResourceOne() {...}

2. Use DynamicFeature:

2.1. Create filter:

public class ResourceOneFilter implements ContainerRequestFilter {

2.2. Implement interface:

public class MaxAgeFeature implements DynamicFeature {
    public void configure(ResourceInfo ri, FeatureContext ctx) {
            ResourceOneFilter filter = new ResourceOneFilter();

In this scenario:

  • filter is not annotated with @Provider annotation;
  • configure(...) method is invoked for every resource method;
  • ctx.register(filter) binds filter with resource method;
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download