001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.kernel.servlet;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.util.InstanceFactory;
020    import com.liferay.portal.kernel.util.StringUtil;
021    
022    import java.util.List;
023    import java.util.concurrent.CopyOnWriteArrayList;
024    
025    import javax.servlet.ServletContextEvent;
026    import javax.servlet.ServletContextListener;
027    import javax.servlet.ServletRequestAttributeEvent;
028    import javax.servlet.ServletRequestAttributeListener;
029    import javax.servlet.ServletRequestEvent;
030    import javax.servlet.ServletRequestListener;
031    import javax.servlet.http.HttpSessionActivationListener;
032    import javax.servlet.http.HttpSessionAttributeListener;
033    import javax.servlet.http.HttpSessionBindingEvent;
034    import javax.servlet.http.HttpSessionBindingListener;
035    import javax.servlet.http.HttpSessionEvent;
036    import javax.servlet.http.HttpSessionListener;
037    
038    /**
039     * @author Brian Wing Shun Chan
040     */
041    public class SecurePluginContextListener
042            extends PluginContextListener
043            implements HttpSessionActivationListener, HttpSessionAttributeListener,
044                               HttpSessionBindingListener, HttpSessionListener,
045                               ServletRequestAttributeListener, ServletRequestListener {
046    
047            public void attributeAdded(
048                    HttpSessionBindingEvent httpSessionBindingEvent) {
049    
050                    if (_httpSessionAttributeListeners == null) {
051                            return;
052                    }
053    
054                    for (HttpSessionAttributeListener httpSessionAttributeListener :
055                                    _httpSessionAttributeListeners) {
056    
057                            httpSessionAttributeListener.attributeAdded(
058                                    httpSessionBindingEvent);
059                    }
060            }
061    
062            public void attributeAdded(
063                    ServletRequestAttributeEvent servletRequestAttributeEvent) {
064    
065                    if (_servletRequestAttributeListeners == null) {
066                            return;
067                    }
068    
069                    for (ServletRequestAttributeListener servletRequestAttributeListener :
070                                    _servletRequestAttributeListeners) {
071    
072                            servletRequestAttributeListener.attributeAdded(
073                                    servletRequestAttributeEvent);
074                    }
075            }
076    
077            public void attributeRemoved(
078                    HttpSessionBindingEvent httpSessionBindingEvent) {
079    
080                    if (_httpSessionAttributeListeners == null) {
081                            return;
082                    }
083    
084                    for (HttpSessionAttributeListener httpSessionAttributeListener :
085                                    _httpSessionAttributeListeners) {
086    
087                            httpSessionAttributeListener.attributeRemoved(
088                                    httpSessionBindingEvent);
089                    }
090    
091            }
092    
093            public void attributeRemoved(
094                    ServletRequestAttributeEvent servletRequestAttributeEvent) {
095    
096                    if (_servletRequestAttributeListeners == null) {
097                            return;
098                    }
099    
100                    for (ServletRequestAttributeListener servletRequestAttributeListener :
101                                    _servletRequestAttributeListeners) {
102    
103                            servletRequestAttributeListener.attributeRemoved(
104                                    servletRequestAttributeEvent);
105                    }
106            }
107    
108            public void attributeReplaced(
109                    HttpSessionBindingEvent httpSessionBindingEvent) {
110    
111                    if (_httpSessionAttributeListeners == null) {
112                            return;
113                    }
114    
115                    for (HttpSessionAttributeListener httpSessionAttributeListener :
116                                    _httpSessionAttributeListeners) {
117    
118                            httpSessionAttributeListener.attributeReplaced(
119                                    httpSessionBindingEvent);
120                    }
121            }
122    
123            public void attributeReplaced(
124                    ServletRequestAttributeEvent servletRequestAttributeEvent) {
125    
126                    if (_servletRequestAttributeListeners == null) {
127                            return;
128                    }
129    
130                    for (ServletRequestAttributeListener servletRequestAttributeListener :
131                                    _servletRequestAttributeListeners) {
132    
133                            servletRequestAttributeListener.attributeReplaced(
134                                    servletRequestAttributeEvent);
135                    }
136            }
137    
138            public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
139                    if (_servletRequestListeners == null) {
140                            return;
141                    }
142    
143                    for (ServletRequestListener servletRequestListener :
144                                    _servletRequestListeners) {
145    
146                            servletRequestListener.requestDestroyed(servletRequestEvent);
147                    }
148            }
149    
150            public void requestInitialized(ServletRequestEvent servletRequestEvent) {
151                    if (_servletRequestListeners == null) {
152                            return;
153                    }
154    
155                    for (ServletRequestListener servletRequestListener :
156                                    _servletRequestListeners) {
157    
158                            servletRequestListener.requestInitialized(servletRequestEvent);
159                    }
160            }
161    
162            public void sessionCreated(HttpSessionEvent httpSessionEvent) {
163                    if (_httpSessionListeners == null) {
164                            return;
165                    }
166    
167                    for (HttpSessionListener httpSessionListener : _httpSessionListeners) {
168                            httpSessionListener.sessionCreated(httpSessionEvent);
169                    }
170            }
171    
172            public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
173                    if (_httpSessionListeners == null) {
174                            return;
175                    }
176    
177                    for (HttpSessionListener httpSessionListener : _httpSessionListeners) {
178                            httpSessionListener.sessionDestroyed(httpSessionEvent);
179                    }
180            }
181    
182            public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
183                    if (_httpSessionActivationListeners == null) {
184                            return;
185                    }
186    
187                    for (HttpSessionActivationListener httpSessionActivationListener :
188                                    _httpSessionActivationListeners) {
189    
190                            httpSessionActivationListener.sessionDidActivate(httpSessionEvent);
191                    }
192            }
193    
194            public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
195                    if (_httpSessionActivationListeners == null) {
196                            return;
197                    }
198    
199                    for (HttpSessionActivationListener httpSessionActivationListener :
200                                    _httpSessionActivationListeners) {
201    
202                            httpSessionActivationListener.sessionWillPassivate(
203                                    httpSessionEvent);
204                    }
205            }
206    
207            public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
208                    if (_httpSessionBindingListeners == null) {
209                            return;
210                    }
211    
212                    for (HttpSessionBindingListener httpSessionBindingListener :
213                                    _httpSessionBindingListeners) {
214    
215                            httpSessionBindingListener.valueBound(httpSessionBindingEvent);
216                    }
217            }
218    
219            public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
220                    if (_httpSessionBindingListeners == null) {
221                            return;
222                    }
223    
224                    for (HttpSessionBindingListener httpSessionBindingListener :
225                                    _httpSessionBindingListeners) {
226    
227                            httpSessionBindingListener.valueUnbound(httpSessionBindingEvent);
228                    }
229            }
230    
231            @Override
232            protected void fireDeployEvent() {
233                    super.fireDeployEvent();
234    
235                    if (_servletContextListeners != null) {
236                            ServletContextEvent servletContextEvent = new ServletContextEvent(
237                                    servletContext);
238    
239                            for (ServletContextListener servletContextListener :
240                                            _servletContextListeners) {
241    
242                                    servletContextListener.contextInitialized(servletContextEvent);
243                            }
244                    }
245            }
246    
247            @Override
248            protected void fireUndeployEvent() {
249                    if (_servletContextListeners != null) {
250                            ServletContextEvent servletContextEvent = new ServletContextEvent(
251                                    servletContext);
252    
253                            for (ServletContextListener servletContextListener :
254                                            _servletContextListeners) {
255    
256                                    servletContextListener.contextDestroyed(servletContextEvent);
257                            }
258                    }
259    
260                    super.fireUndeployEvent();
261            }
262    
263            protected void instantiatingListener(String listenerClassName)
264                    throws Exception {
265    
266                    if (_log.isDebugEnabled()) {
267                            _log.debug("Instantiating " + listenerClassName);
268                    }
269    
270                    Object listener = InstanceFactory.newInstance(
271                            pluginClassLoader, listenerClassName);
272    
273                    if (listener instanceof HttpSessionActivationListener) {
274                            if (_httpSessionActivationListeners == null) {
275                                    _httpSessionActivationListeners =
276                                            new CopyOnWriteArrayList<HttpSessionActivationListener>();
277                            }
278    
279                            _httpSessionActivationListeners.add(
280                                    (HttpSessionActivationListener)listener);
281                    }
282    
283                    if (listener instanceof HttpSessionAttributeListener) {
284                            if (_httpSessionAttributeListeners == null) {
285                                    _httpSessionAttributeListeners =
286                                            new CopyOnWriteArrayList<HttpSessionAttributeListener>();
287                            }
288    
289                            _httpSessionAttributeListeners.add(
290                                    (HttpSessionAttributeListener)listener);
291                    }
292    
293                    if (listener instanceof HttpSessionBindingListener) {
294                            if (_httpSessionBindingListeners == null) {
295                                    _httpSessionBindingListeners =
296                                            new CopyOnWriteArrayList<HttpSessionBindingListener>();
297                            }
298    
299                            _httpSessionBindingListeners.add(
300                                    (HttpSessionBindingListener)listener);
301                    }
302    
303                    if (listener instanceof HttpSessionListener) {
304                            if (_httpSessionListeners == null) {
305                                    _httpSessionListeners =
306                                            new CopyOnWriteArrayList<HttpSessionListener>();
307                            }
308    
309                            _httpSessionListeners.add((HttpSessionListener)listener);
310                    }
311    
312                    if (listener instanceof ServletContextListener) {
313                            if (_servletContextListeners == null) {
314                                    _servletContextListeners =
315                                            new CopyOnWriteArrayList<ServletContextListener>();
316                            }
317    
318                            _servletContextListeners.add((ServletContextListener)listener);
319                    }
320    
321                    if (listener instanceof ServletRequestAttributeListener) {
322                            if (_servletRequestAttributeListeners == null) {
323                                    _servletRequestAttributeListeners =
324                                            new CopyOnWriteArrayList<ServletRequestAttributeListener>();
325                            }
326    
327                            _servletRequestAttributeListeners.add(
328                                    (ServletRequestAttributeListener)listener);
329                    }
330    
331                    if (listener instanceof ServletRequestListener) {
332                            if (_servletRequestListeners == null) {
333                                    _servletRequestListeners =
334                                            new CopyOnWriteArrayList<ServletRequestListener>();
335                            }
336    
337                            _servletRequestListeners.add((ServletRequestListener)listener);
338                    }
339            }
340    
341            protected void instantiatingListeners() throws Exception {
342                    String[] listenerClassNames = StringUtil.split(
343                            servletContext.getInitParameter("portalListenerClasses"));
344    
345                    for (String listenerClassName : listenerClassNames) {
346                            instantiatingListener(listenerClassName);
347                    }
348            }
349    
350            private static Log _log = LogFactoryUtil.getLog(
351                    SecurePluginContextListener.class);
352    
353            private List<HttpSessionActivationListener> _httpSessionActivationListeners;
354            private List<HttpSessionAttributeListener> _httpSessionAttributeListeners;
355            private List<HttpSessionBindingListener> _httpSessionBindingListeners;
356            private List<HttpSessionListener> _httpSessionListeners;
357            private List<ServletContextListener> _servletContextListeners;
358            private List<ServletRequestAttributeListener>
359                    _servletRequestAttributeListeners;
360            private List<ServletRequestListener> _servletRequestListeners;
361    
362    }