2013-12-17 21 views
2

我尝试让我的过滤器被调用,但它似乎被忽略。所以我有两个问题: 1.配置如何看起来像使用谷歌端点的servlete过滤器? 2.使用slf4j(jdk日志作为后端)记录应该在过滤器类中正常工作 - 我猜?自定义servlet过滤器谷歌端点

配置在web.xml:

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>myCoolFilter</filter-name> 
    <filter-class>com.example.MyCoolFilterClass</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>myCoolFilter</filter-name> 
    <url-pattern>/_ah/spi/endpoint-api-name/*</url-pattern> 
</filter-mapping> 

<servlet> 
    <servlet-name>ServiceServlce</servlet-name> 
    <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> 
    <init-param> 
     <param-name>services</param-name> 
     <param-value>com.example.MyCoolEndpoint</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ServiceServlce</servlet-name> 
    <url-pattern>/_ah/spi/endpoint-api-name/*</url-pattern> 
</servlet-mapping> 

回答

1

我发现的唯一的解决办法是将过滤器添加作为一般的过滤器(/ *)和处理检查请求URI:

HttpServletRequest httpRequest = (HttpServletRequest) req; 
String requestURI = httpRequest.getRequestURI(); 
log.info("request uri " + requestURI); 
if (!requestURI.toLowerCase().contains("endpoint-api-name")) { 
    chain.doFilter(req, resp); 
    return; 
} 

这是值得注意的是,我也尝试在过滤声明中使用servlet名称 - 没有结果。我得到过滤器工作的唯一方法是通过/ * url-pattern。