我面临以下问题/错误(对于用例:我添加了一个 log4j 过滤器,因为它提供了很好的日志记录,有关详细信息,请参阅此处)
这是关于在过滤器中访问请求参数时编码到底发生了什么:所有 ü ä ö é è 等都变成了 Ã1/4 ä à à é 和他们丑陋的朋友。如果我不访问请求参数,它可以正常工作。
这会导致整个应用程序中出现错误的字符
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
您显然有另一个过滤器可以request.setCharacterEncoding("UTF-8")
.这是一个一次性任务,它要求尚未分析请求正文。但是调用getParameter()
将开始分析整个请求正文。因此,如果将此日志记录筛选器放在编码筛选器的前面,则应用程序的残余部分检索正确编码的字符为时已晚。
交换web.xml
中的筛选器顺序,并确保字符编码筛选器放在以任何方式访问请求正文的任何其他筛选器之前。