01: package com.opensymphony.webwork.dispatcher;
02:
03: import com.opensymphony.webwork.config.ServletContextSingleton;
04: import org.apache.commons.logging.Log;
05: import org.apache.commons.logging.LogFactory;
06:
07: import javax.servlet.Filter;
08: import javax.servlet.FilterConfig;
09: import javax.servlet.ServletContext;
10: import javax.servlet.ServletException;
11: import javax.servlet.http.HttpSession;
12:
13: /**
14: * When running Weblogic Server 6.1, this class should be
15: * specified in web.xml instead of {@link FilterDispatcher}.
16: * <p/>
17: * This class properly handles the weblogic.jar handling
18: * of servlet filters. There is one serious incompatibility, and
19: * that is that while {@link FilterDispatcher#init(FilterConfig)}
20: * throws a {@link ServletException}, this class's method
21: * {@link #setFilterConfig(FilterConfig)} does not throw
22: * the exception. Since {@link #setFilterConfig(FilterConfig)}
23: * invokes {@link FilterDispatcher#init(FilterConfig)}, the setter
24: * must "swallow" the exception. This it does by logging the
25: * exception as an error.
26: *
27: * @author Scott N. Smith scottnelsonsmith@yahoo.com
28: * @version $Id: FilterDispatcherCompatWeblogic61.java 2339 2006-03-08 20:28:56Z rainerh $
29: */
30: public class FilterDispatcherCompatWeblogic61 extends FilterDispatcher
31: implements Filter {
32: /**
33: * the standard logger
34: */
35: private static Log log = LogFactory
36: .getLog(FilterDispatcherCompatWeblogic61.class);
37:
38: /**
39: * dummy setter for {@link #filterConfig}; this method
40: * sets up the {@link com.opensymphony.webwork.config.ServletContextSingleton} with
41: * the servlet context from the filter configuration.
42: * <p/>
43: * This is needed by Weblogic Server 6.1 because it
44: * uses a slightly obsolete Servlet 2.3-minus spec
45: * whose {@link Filter} interface requires this method.
46: * <p/>
47: *
48: * @param filterConfig the filter configuration.
49: */
50: public void setFilterConfig(FilterConfig filterConfig) {
51: try {
52: init(filterConfig);
53: } catch (ServletException se) {
54: log
55: .error(
56: "Couldn't set the filter configuration in this filter",
57: se);
58: }
59:
60: ServletContextSingleton singleton = ServletContextSingleton
61: .getInstance();
62: singleton.setServletContext(filterConfig.getServletContext());
63: }
64:
65: /**
66: * answers the servlet context.
67: * <p/>
68: * Servlet 2.3 specifies that this can be retrieved from
69: * the session. Unfortunately, weblogic.jar can only retrieve
70: * the servlet context from the filter config. Hence, this
71: * returns the servlet context from the singleton that was
72: * setup by {@link #setFilterConfig(FilterConfig)}.
73: *
74: * @param session the HTTP session. Not used
75: * @return the servlet context.
76: */
77: protected ServletContext getServletContext(HttpSession session) {
78: ServletContextSingleton singleton = ServletContextSingleton
79: .getInstance();
80: return singleton.getServletContext();
81: }
82:
83: /**
84: * This method is required by Weblogic 6.1 SP4 because
85: * they defined this as a required method just before
86: * the Servlet 2.3 specification was finalized.
87: *
88: * @return the filter's filter configuration
89: */
90: public FilterConfig getFilterConfig() {
91: return super.getFilterConfig();
92: }
93: }
|