过滤器访问JSF / facelets中的请求参数会导致错误的编码

时间:2011-05-20 12:27:13

标签: java jsf character-encoding servlet-filters

我遇到以下问题/错误 (对于用例:我添加了一个log4j过滤器,因为它可以提供良好的日志记录,详情请参阅here

这是关于在访问过滤器中访问请求参数时编码发生了什么: 所有üäöéèà等变成了ÃÃÃÃÃÃÃÃÃÃ和他们丑陋的朋友。 如果我不访问请求参数,它可以正常工作。

这导致整个应用程序中出现错误的字符

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 个答案:

答案 0 :(得分:2)

你显然有另一个过滤器request.setCharacterEncoding("UTF-8")。这是一次性任务,它要求尚未解析请求正文。但是调用getParameter()将开始解析整个请求体。因此,如果您将此日志记录过滤器放在编码过滤器前面,那么应用程序的剩余部分检索正确编码的字符为时已晚。

web.xml中交换过滤器顺序,并确保将字符编码过滤器放置在以任何方式访问请求正文的任何​​其他过滤器之前。