泽西响应过滤器

Posted

技术标签:

【中文标题】泽西响应过滤器【英文标题】:Jersey Response Filter 【发布时间】:2014-02-10 15:59:05 【问题描述】:

我正在尝试创建一个球衣过滤器来过滤服务器对 500 错误的所有响应。

但我对过滤器了解不多,所以我刚刚开始编写一些代码,但我不知道如何继续...谁能帮我解决这个问题。

@Override
public void filter(ContainerRequestContext requestContext) throws IOException 

我的 web.xml 看起来像这样

<servlet>
<servlet-name>Authenticator</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
    <param-value>com.query.displayer.Filters</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Authenticator</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

【问题讨论】:

【参考方案1】:

您在应用程序中混合了 Jersey 的 2 个版本:实现来自 JAX-RS 2.0 (Jersey 2) 的 ContainerRequestFilter 和 Jersey 1 的描述符配置 (web.xml)(参见前缀 com.sun.jersey)。以下文章解释了如何在 Jersey 2 中注册提供程序:

Registering Resources and Providers in Jersey 2

看来你我们在 Jersey 1 中使用ResourceFilterFactory。这个概念在 Jersey 2 中不存在,但有一个新概念(直接在 JAX-RS 2.0 中)如何做到这一点:

Binding JAX-RS Providers to Resource Methods

【讨论】:

谢谢你...帮助很大。【参考方案2】:

当您使用 Jersey-2 时,您必须使用以下配置将您的过滤器注册到 web.xml 中

jersey.config.server.provider.classnames

而不是

com.sun.jersey.spi.container.ContainerRequestFilters (jersey-1x)

 <!-- This is the config needed -->
<servlet>    
      //...         
     <init-param>
         <param-name>jersey.config.server.provider.classnames</param-name>
         <param-value>com.your_package_path.yourClassFilter</param-value>
     </init-param>
      //...
</servlet>

【讨论】:

以上是关于泽西响应过滤器的主要内容,如果未能解决你的问题,请参考以下文章

什么是泽西过滤器?

泽西岛和过滤器异常处理

泽西岛日志过滤器的 Maven 依赖项

javax servlet过滤器与泽西过滤器

带有泽西岛的 OPTIONS 请求上的 CORS 标头

CORS Java 服务器端实现