2013-12-17 18 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。