我正在使用一个在Tomcat 6服务器上运行的web应用程序。对于某些请求(来自特定类型的客户端),ServletRequestWrapper的getParameter方法会在内部处理所有charconveronexception日志记录,这些日志记录是关于该异常的服务器活动信息的标准输出。问题是,有时它可能会记录敏感数据(如密码)……例如,它可以记录如下内容:
INFO: Character decoding failed. Parameter [pw] with value [holaãã%20%222522%2] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
java.io.CharConversionException: EOF
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:80)
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:410)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:370)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:217)
at org.apache.catalina.connector.Request.parseParameters(Request.java:2647)
at org.apache.catalina.connector.Request.getParameter(Request.java:1106)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:355)
at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158)
at myClasss (myClass.java:666)
我不希望解决服务器上的问题,因为我看到的是客户端和客户端必须解决的问题。我期待着"隐藏"与日志中输出的坏参数相关的值。我不是tomcat日志系统和如何配置它的专家,我访问并阅读了一些材料(这个和这个…),但找不到一个线索,指出我到正确的方向(如果有任何…)。
我已经在看这个ServletRequestWrapper或ServletResponseWrapper在生产?,但是不知道如何修改这个内部消息。
谢谢你做的一切!
的问候维克多前两句话:
-
错误的编码是不是严格的客户端问题;只是设置不同而已。请允许我指出一些服务器设置。此外,搜索"servlet过滤器字符编码"将产生一些ServletFilters,它们为getRequestParameter设置正确的请求编码。(GET函数不同于POST!)
-
结尾的"%2"有点可疑,不是吗?
输出看起来像日志输出,确实在Parameters.java中我找到了org.apache.juli.logging.Log
。这是Tomcat的另一个日志库,似乎基于java.util。对于org.apache.tomcat.util.http.Parameters=SEVERE
,您可以将WEB-INF/classes/logging.properties
中的级别设置为FATAL/ERROR。