2013-04-11 67 views
0

我面临的问题是部署的Web应用程序(没有源代码或任何引用)似乎对某些会话参数有问题。我不知道如何对该应用程序进行逆向工程,所以我有一种感觉,我可以证明这个事件的唯一方式是使用log4j或tomcat自己的JULI工具来获取会话参数列表。我已阅读了有关Wrox的专业Apache Tomcat 6,并坦率地说,它在这方面没有太多帮助...Tomcat6 - 如何通过log4j或JULI获取会话参数?

任何暗示与log4j或JULI走哪条路?

非常感谢提前。

回答

1

您可以添加过滤器来打印会话属性的列表,以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>