1

我不知道这是否可能,但我已经创建了 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,因为它不是过滤器。

4

1 回答 1

0

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

例如:

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在指定包中注释的所有类

于 2016-08-31T06:57:24.753 回答