package com.getsentry.raven.servlet; import com.getsentry.raven.Raven; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletRequest; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.http.HttpServletRequest; /** * Request listener in charge of capturing {@link HttpServletRequest} to allow * {@link com.getsentry.raven.event.helper.HttpEventBuilderHelper} to provide details on the current HTTP session * in the event sent to Sentry. */ public class RavenServletRequestListener implements ServletRequestListener { private static final Logger logger = LoggerFactory.getLogger(RavenServletRequestListener.class); private static final ThreadLocal<HttpServletRequest> THREAD_REQUEST = new ThreadLocal<>(); public static HttpServletRequest getServletRequest() { return THREAD_REQUEST.get(); } @Override public void requestDestroyed(ServletRequestEvent servletRequestEvent) { THREAD_REQUEST.remove(); try { Raven raven = Raven.getStoredInstance(); if (raven != null) { raven.getContext().clear(); } } catch (Exception e) { logger.error("Error clearing Context state.", e); } } @Override public void requestInitialized(ServletRequestEvent servletRequestEvent) { ServletRequest servletRequest = servletRequestEvent.getServletRequest(); if (servletRequest instanceof HttpServletRequest) { THREAD_REQUEST.set((HttpServletRequest) servletRequest); } } }