如何在不添加web.xml的情况下注入泽西过滤器

时间:2012-08-14 00:11:14

标签: filter jersey

我不知道这是否可行,但我已经创建了Jersey过滤器,用于记录扩展日志过滤器,我添加了

<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.chegg.commons.web.logging.WebRequestLogger</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.chegg.commons.web.logging.WebRequestLogger</param-value>
</init-param>

在我的web.xml中,一切正常。我想把它放在另一个层面。 servlet容器可以通过我的日志记录类顶部的任何注释调用过滤器而不使用web.xml中的条目。像@Aspect这样的东西。我不想使用@Aspect,因为它不是过滤器。

1 个答案:

答案 0 :(得分:0)

是的,您始终可以使用@Provider注释来注释CustomFilterClasses,只需手动注册这些注释或让泽西自动扫描您的过滤器。

例如:

package com.test.poc.filters;
@Provider
public class CustomFilter implements ContainerRequestFilter{
 @Override
 public void filter(ContainerRequestContext requestContext){
  //filter logic..
 }
}

是我们希望在运行时由jersey自动发现的一个过滤器,因此我们可以轻松指定一个扩展ResourceConfig的类

@ApplicationPath("api")
public class CustomResourceConfig extends ResourceConfig{
 public CustomResourceConfig(){
  super();
  packages("com.test.poc.filters;com.test.poc.restservices;com.test.poc.providers");
  //ragister any other classes like
  //register(JacksonFeature.class);
 }
}

这将自动扫描指定包中使用@Provider@Path注释的所有类