package net.jforum.util.legacy.clickstream;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import net.jforum.util.preferences.ConfigKeys;
import org.apache.log4j.Logger;
/**
* The filter that keeps track of a new entry in the clickstream for <b>every request</b>.
*
* @author <a href="plightbo@hotmail.com">Patrick Lightbody</a>
* @author Rafael Steil (little hacks for JForum)
* @version $Id: ClickstreamFilter.java,v 1.6 2007/09/20 16:07:09 rafaelsteil Exp $
*/
public class ClickstreamFilter implements Filter
{
private static final Logger log = Logger.getLogger(ClickstreamFilter.class);
/**
* Attribute name indicating the filter has been applied to a given request.
*/
private final static String FILTER_APPLIED = "_clickstream_filter_applied";
/**
* Processes the given request and/or response.
*
* @param request The request
* @param response The response
* @param chain The processing chain
* @throws IOException If an error occurs
* @throws ServletException If an error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
{
// Ensure that filter is only applied once per request.
if (request.getAttribute(FILTER_APPLIED) == null) {
request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
String bot = BotChecker.isBot((HttpServletRequest)request);
if (bot != null && log.isDebugEnabled()) {
log.debug("Found a bot: " + bot);
}
request.setAttribute(ConfigKeys.IS_BOT, Boolean.valueOf(bot != null));
}
// Pass the request on
chain.doFilter(request, response);
}
/**
* Initializes this filter.
*
* @param filterConfig The filter configuration
* @throws ServletException If an error occurs
*/
public void init(FilterConfig filterConfig) throws ServletException {}
/**
* Destroys this filter.
*/
public void destroy() {}
}