Skip to content

Commit

Permalink
example of filtering
Browse files Browse the repository at this point in the history
  • Loading branch information
carlo-rtr committed Sep 3, 2014
1 parent 2ab7826 commit 457803e
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 0 deletions.
Expand Up @@ -5,6 +5,7 @@
import com.example.helloworld.core.Person;
import com.example.helloworld.core.Template;
import com.example.helloworld.db.PersonDAO;
import com.example.helloworld.filter.DateNotSpecifiedFilterFactory;
import com.example.helloworld.health.TemplateHealthCheck;
import com.example.helloworld.resources.*;
import io.dropwizard.Application;
Expand Down Expand Up @@ -56,6 +57,7 @@ public void run(HelloWorldConfiguration configuration,
final Template template = configuration.buildTemplate();

environment.healthChecks().register("template", new TemplateHealthCheck(template));
environment.jersey().getResourceConfig().getResourceFilterFactories().add(new DateNotSpecifiedFilterFactory());

environment.jersey().register(new BasicAuthProvider<>(new ExampleAuthenticator(),
"SUPER SECRET STUFF"));
Expand All @@ -64,5 +66,6 @@ public void run(HelloWorldConfiguration configuration,
environment.jersey().register(new ProtectedResource());
environment.jersey().register(new PeopleResource(dao));
environment.jersey().register(new PersonResource(dao));
environment.jersey().register(new FilteredResource());
}
}
@@ -0,0 +1,55 @@
package com.example.helloworld.filter;

import com.google.common.collect.Lists;
import com.sun.jersey.api.model.AbstractMethod;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;

import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
import com.sun.jersey.spi.container.ResourceFilter;
import com.sun.jersey.spi.container.ResourceFilterFactory;
import java.util.List;

public class DateNotSpecifiedFilterFactory implements ResourceFilterFactory {

@Override
public List<ResourceFilter> create(AbstractMethod am) {
boolean methodNeedsDateHeader = am.isAnnotationPresent(DateRequired.class);

return methodNeedsDateHeader ? Lists.<ResourceFilter>newArrayList(new DateNotSpecifiedFilter()) :
Lists.<ResourceFilter>newArrayList();
}

private static class DateNotSpecifiedFilter implements ResourceFilter {
@Override
public ContainerRequestFilter getRequestFilter() {
return new ContainerRequestFilter() {
@Override
public ContainerRequest filter(ContainerRequest request) {
String dateHeader = request.getHeaderValue(HttpHeaders.DATE);

if (dateHeader == null) {
Exception cause = new IllegalArgumentException("Date Header was not specified");
throw new WebApplicationException(cause, Response.Status.BAD_REQUEST);
} else {
return request;
}
}
};
}

@Override
public ContainerResponseFilter getResponseFilter() {
return new ContainerResponseFilter() {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
return response;
}
};
}
}
}
@@ -0,0 +1,11 @@
package com.example.helloworld.filter;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DateRequired {
}
@@ -0,0 +1,17 @@
package com.example.helloworld.resources;

import com.example.helloworld.filter.DateRequired;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/filtered")
public class FilteredResource {

@GET
@DateRequired
@Path("hello")
public String sayHello() {
return "hello";
}
}

0 comments on commit 457803e

Please sign in to comment.