2011-05-20 19 views
3

我正面臨以下問題/ bug (對於用例:我添加了log4j過濾器,因爲它提供了良好的日誌記錄功能,詳情請參閱here過濾器訪問JSF/facelets中的請求參數導致編碼錯誤

這是關於什麼的過濾器訪問請求參數時到底發生了編碼: 所有U A產地證電子E中的等變成那張澶öéA A及其醜陋的朋友。 如果我不訪問請求參數,它工作正常。

這會導致錯誤的字符在整個應用程序

public class Log4jDiagnosticFilter implements Filter { 

    public void init(FilterConfig arg0) throws ServletException { 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
      ServletException { 
       String requestId=request.getParameter("LOGID"); 
       chain.doFilter(request, response); 
     } 
} 

所有的人物都是罰款訪問請求參數時。

有什麼我失蹤?有沒有不同的方式來做到這一點?

順便說一句,我們使用的是Java 1.5和JSF 1.2

回答

2

你顯然另一個過濾器確實request.setCharacterEncoding("UTF-8")。這是一次性任務,它要求請求主體尚未被解析。但調用getParameter()將開始解析整個請求體。因此,如果您將此日誌記錄篩選器放在編碼篩選器的前面,那麼應用程序的剩餘部分檢索正確編碼的字符爲時已晚。

交換web.xml中的過濾器順序,並確保字符編碼過濾器位於以任何方式訪問請求主體的任何其他過濾器之前。

相關問題