2016-11-09 36 views
1

我正在编写使用球衣2和servlet 3的REST服务。我有自定义的GET方法,所有这些方法首先看看请求是否有某些标头。如果标题不存在,我抛出一个异常。有没有办法提供一个“父母般的”@GET方法,它会在进入相应的@路径链接之前拒绝没有某些标题的请求?就像,如果我的服务名称为myService,@Path为“getHello”,如何在使用myService/getHello注释方法之前先检查标头?Java休息如何使整体获得过滤器

+0

如果你正在使用Spring,你可以使用拦截器来验证你的头。 –

+0

您是否检查过此https://jersey.java.net/documentation/latest/filters-and-interceptors.html - ContainerRequestFilter – Waqas

回答

1

您可以使用ContainerRequestFilter和检查方法

@Provider 
public class CheckHeaderFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext context) { 
     if (context.getMethod().toUpperCase().equals("GET")) { 
      String header = context.getHeaderString("SomeHeader"); 
      MultivaluedMap<String, String> headers = context.getHeaders(); 
      if(notValidHEaders) { 
       context.abortWith(Response.status(400).entity("Bad").build()); 
       // or throw WebApplicationException 
      } 
     } 
    } 
} 

如果使用包扫描寄存器资源,过滤器也应该得到回升,并由于@Provider标注的注册。否则,你需要自己注册它

参见: