Фильтр с доступом к параметру запроса в JSF / facelets приводит к неправильному кодированию - PullRequest
3 голосов
/ 20 мая 2011

Я столкнулся со следующей проблемой / ошибкой (для случая использования: я добавил фильтр log4j, так как он делает хорошую регистрацию доступной, подробности см. здесь )

Это примерночто, черт возьми, происходит с кодировкой при доступе к параметру запроса в фильтре: все, и т. д., и т. д. превращаются в гадюшников и их уродливых друзей.Если я не получаю доступ к параметру запроса, он работает нормально.

это приводит к неправильным символам во всем приложении

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

1 Ответ

2 голосов
/ 20 мая 2011

У вас, очевидно, есть другой фильтр, который делает request.setCharacterEncoding("UTF-8"). Это одноразовая задача, и она требует, чтобы тело запроса еще не было проанализировано. Но вызов getParameter() начнет анализировать все тело запроса. Поэтому, если вы поместите этот фильтр журналирования перед фильтром кодирования, тогда для остатка приложения будет слишком поздно извлечь правильно закодированные символы.

Поменяйте местами порядок фильтров в web.xml и убедитесь, что фильтр кодировки символов помещен перед любым другим фильтром, который каким-либо образом обращается к телу запроса.

...