在web.xml中使用带有过滤器表示法的Jersey2 ContainerRequestFilter

时间:2015-07-07 10:13:14

标签: java tomcat filter jersey-2.0

我正在尝试通过web.xml将Jersey2 ContainerRequestFilter添加到webapp。目前我总是使用带有servlet的符号来描述here

||

现在在另一种情况下,我没有一个servlet,而是在tomcat上运行的wicket应用程序,我想使用我的过滤器。所以我尝试使用替代过滤器表示法,在上面的相同文章中描述(例4.10):

<servlet>
    <servlet-name>MyApplication</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        ...
    </init-param>
</servlet>
...
<servlet-mapping>
    <servlet-name>MyApplication</servlet-name>
    <url-pattern>/myApp/*</url-pattern>
</servlet-mapping>

我成功地将它与Jersey1过滤器表示法一起使用但是我无法使它与Jersey2过滤器一起使用(这个更新,所以我更喜欢它比旧版本更好)。

不幸的是,我发现此功能的文档相当差。任何人都可以帮助,如果这可能有效,如果有,如何做?

1 个答案:

答案 0 :(得分:1)

正如@peeskillet在评论中提到的那样,我不得不在过滤器的顶部添加@Provider注释,以便它被Jersey选中。为试图找到解决方案的任何人添加此答案。对ContainerResponseFilter也可以这样做。

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;


@Provider
public class LoggingFilter implements ContainerRequestFilter,ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        //DO Stuff
    }

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {
        //DO Stuff
    }
}