![](/img/trans.png)
[英]Use ContainerRequestFilter in Jersey without web.xml
[英]Use Jersey2 ContainerRequestFilter with filter notation in web.xml
我正在嘗試通過web.xml將Jersey2 ContainerRequestFilter添加到Webapp。 目前,我總是用符號與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>
現在在另一種情況下,我沒有要在Tomcat上運行的servlet而是一個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過濾器一起使用(該過濾器是最新的,因此我更喜歡它而不是較舊的過濾器)。
不幸的是,我發現此功能的文檔化很差。 任何人都可以幫忙,如果可行的話,怎么做呢?
正如@peeskillet在評論中提到的那樣,我必須在Filter頂部添加@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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.