我不知道这是否可行,但我已经创建了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,因为它不是过滤器。
答案 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
注释的所有类