我遇到这样一个问题:已部署的 Web 应用程序(没有源代码或任何引用)似乎在某些 session 参数方面存在问题。我不知道如何对该应用程序进行逆向工程,所以我觉得我可以显示此事件的唯一方法是使用 log4j 或 tomcat 自己的 JULI 工具来获取 session 参数列表。我读过 Wrox 的 Professional Apache Tomcat 6,坦率地说,它在这方面帮助不大...
关于使用 log4j 或 JULI 的方向有什么提示吗?
非常感谢。
最佳答案
您可以添加一个过滤器来将 session 属性列表打印到 Log4J,如下所示:
public class SessionAttributesLoggingFilter implements Filter {
private Logger log = Logger.getLogger(this.getClass());
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession();
Enumeration<String> sessionAttributeNames = session.getAttributeNames();
log.info("Session attributes before request ----------------------->");
while (sessionAttributeNames.hasMoreElements()) {
String attr = sessionAttributeNames.nextElement();
log.info(" "+attr + " = " + session.getAttribute(attr));
}
chain.doFilter(request, response);
sessionAttributeNames = session.getAttributeNames();
log.info("Session attributes after request ----------------------->");
while (sessionAttributeNames.hasMoreElements()) {
String attr = sessionAttributeNames.nextElement();
log.info(" "+attr + " = " + session.getAttribute(attr));
}
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig arg0) throws ServletException {
log.info("Logging session attributes ...");
}
public void destroy() {}
}
然后将映射添加到您的 web.xml 并重新启动您的应用:
<filter>
<filter-name>sessionLogging</filter-name>
<filter-class>PACKAGENAME.SessionAttributesLoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionLogging</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
关于Tomcat6 - 如何通过 log4j 或 JULI 获取 session 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939769/