我们前面的文章中介绍了一系列Tomcat提供的用于各种不同场景的Filter。
今天要介绍的,还是一个预置的Filter,主要用于问题分析,bug跟踪的时候使用。
前面文章曾经分析过Filter的工作原理
和Tomcat学设计模式 | 责任链模式及Filter的工作原理
我们知道整个Filter的执行流程,是根据FilterDef 的顺序进行遍历执行,所以,为了进行所有的请求拦截,这个Dumper在配置的时候,配置在第一个位置。
同时,需要注意的一个问题是,我们之前分析乱码问题的时候了解过,
如果在setCharacterEncoding之前进行过parameter的解析,那后面再设置encoding其实是不起作用的。深度揭秘乱码问题背后的原因及解决方式
同时,在使用该Filter的时候, 建议设置logger,把相关的内容定向到特定文件中。官方文档推荐使用下面的配置形式。
关于logger配置,可以参考之前分析logging实现的两篇文章,在logging.properties中进行配置。
说明:
使用该filter的副作用,即请求中包含的所有请求参数,都会被输出出来,同时参数会使用默认的编码方式进行编码解码。所以,建议在测试环境中使用。
源码实现上其实比较简单,是直接在filter调用前进行request内各项信息的解析,并且在filter调用之后,进行response的状态等进行解析记录。以下即为实现内容:
我们可以从中了解一些request和response中包含的特定信息获取方法,以便于在需要的时候,可以基于Servlet的API进行获取。
例如下面的几个:
Request.getAuthType() 认证类型
Request.getCookies() cookie
Request.getHeaderNames() 请求头名称
Request.getHeaders(hname) 请求头值,根据前一项获取
Request.getQueryString() 请求Query
Response.getStatus() 响应状态码
Response.getHeaderNames() 响应头名称
response.getContentType() 响应资源类型,基于此,浏览器进行MIME的匹配。
这样,通过Filter的配置,一次请求的request和response的各类信息就基本都拿到了,从而可以帮助进行问题的分析。
扫描或长按下方二维码,即可关注,发现更多精彩文章!