2011-03-22 77 views
1

我有一個應用程序,目前我正在使用兩個過濾器。在UrlRewriteFilter之前打印訪問日誌

第一個是UrlRewriteFilter,它用於重寫URL。

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    <init-param> 
     <param-name>logLevel</param-name> 
     <param-value>DEBUG</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

其次是打印每個頁面的性能以及url的過濾器。

<filter> 
    <filter-name>PerfLoggingFilter</filter-name> 
    <filter-class> 
     com.sia.saa.common.filter.PerfLoggingFilter 
     </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>PerfLoggingFilter</filter-name> 
    <url-pattern>*.form</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

但是在日誌中只有重寫的URL正在打印,而不是原始URL。
請建議一種方法,以便URL重寫可以繼續,但在日誌中只打印原始URL。
注意:如果您需要其他詳細信息,請提問。

回答

2

由於UrlRewriteFilter使用RequestDispatcher.forward(),我想你可以得到你的日誌過濾原始請求的URL爲

request.getAttribute("javax.servlet.forward.request_uri") 

,使您可以登錄他們。

+0

嗨axtavt,request.getAttribute(「javax.servlet.forward.request_uri」)值在打印時爲null。是否有其他參數我應該尋找? – 2011-03-23 08:31:43

0

在第一個過濾器之前不可能有第二個過濾器嗎?如果第二個過濾器先執行,您將有原始URL ...