【问题标题】:Use Jersey2 ContainerRequestFilter with filter notation in web.xml在 web.xml 中使用带有过滤器符号的 Jersey2 ContainerRequestFilter
【发布时间】:2015-07-07 10:13:14
【问题描述】:

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

<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>

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

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

我成功地将它与 Jersey1 过滤器符号一起使用,但无法使其与 Jersey2 过滤器一起使用(这个是最新的,所以我更喜欢它而不是旧的)。

不幸的是,我发现此功能的文档很差。如果这可行,任何人都可以提供帮助吗?如果可行,该怎么做?

【问题讨论】:

  • 你为什么不在过滤器上添加一个@Provider 注释并让它通过扫描被拾取,就像你所有的资源类都被扫描@Path 一样。见 4.7.1.2。来自您的链接。
  • 感谢您的提示。无论如何,我的过滤器已经被 @Provider 注释了,但是我在包中有几个过滤器类,我不希望它们都被应用。实际上我使用了链接中4.7.1.3中描述的方式。两者都应请求产生 404...

标签: java tomcat filter jersey-2.0


【解决方案1】:

正如@peeskillet 在 cmets 中所提到的,我必须在过滤器顶部添加 @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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 2016-01-28
    • 2016-09-23
    • 2020-03-27
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多