001
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
041 public class SecurePluginContextListener
042 extends PluginContextListener
043 implements HttpSessionActivationListener, HttpSessionAttributeListener,
044 HttpSessionBindingListener, HttpSessionListener,
045 ServletRequestAttributeListener, ServletRequestListener {
046
047 @Override
048 public void attributeAdded(
049 HttpSessionBindingEvent httpSessionBindingEvent) {
050
051 if (_httpSessionAttributeListeners == null) {
052 return;
053 }
054
055 for (HttpSessionAttributeListener httpSessionAttributeListener :
056 _httpSessionAttributeListeners) {
057
058 httpSessionAttributeListener.attributeAdded(
059 httpSessionBindingEvent);
060 }
061 }
062
063 @Override
064 public void attributeAdded(
065 ServletRequestAttributeEvent servletRequestAttributeEvent) {
066
067 if (_servletRequestAttributeListeners == null) {
068 return;
069 }
070
071 for (ServletRequestAttributeListener servletRequestAttributeListener :
072 _servletRequestAttributeListeners) {
073
074 servletRequestAttributeListener.attributeAdded(
075 servletRequestAttributeEvent);
076 }
077 }
078
079 @Override
080 public void attributeRemoved(
081 HttpSessionBindingEvent httpSessionBindingEvent) {
082
083 if (_httpSessionAttributeListeners == null) {
084 return;
085 }
086
087 for (HttpSessionAttributeListener httpSessionAttributeListener :
088 _httpSessionAttributeListeners) {
089
090 httpSessionAttributeListener.attributeRemoved(
091 httpSessionBindingEvent);
092 }
093 }
094
095 @Override
096 public void attributeRemoved(
097 ServletRequestAttributeEvent servletRequestAttributeEvent) {
098
099 if (_servletRequestAttributeListeners == null) {
100 return;
101 }
102
103 for (ServletRequestAttributeListener servletRequestAttributeListener :
104 _servletRequestAttributeListeners) {
105
106 servletRequestAttributeListener.attributeRemoved(
107 servletRequestAttributeEvent);
108 }
109 }
110
111 @Override
112 public void attributeReplaced(
113 HttpSessionBindingEvent httpSessionBindingEvent) {
114
115 if (_httpSessionAttributeListeners == null) {
116 return;
117 }
118
119 for (HttpSessionAttributeListener httpSessionAttributeListener :
120 _httpSessionAttributeListeners) {
121
122 httpSessionAttributeListener.attributeReplaced(
123 httpSessionBindingEvent);
124 }
125 }
126
127 @Override
128 public void attributeReplaced(
129 ServletRequestAttributeEvent servletRequestAttributeEvent) {
130
131 if (_servletRequestAttributeListeners == null) {
132 return;
133 }
134
135 for (ServletRequestAttributeListener servletRequestAttributeListener :
136 _servletRequestAttributeListeners) {
137
138 servletRequestAttributeListener.attributeReplaced(
139 servletRequestAttributeEvent);
140 }
141 }
142
143 @Override
144 public void contextInitialized(ServletContextEvent servletContextEvent) {
145 servletContext = servletContextEvent.getServletContext();
146
147 servletContext.setAttribute(
148 SecurePluginContextListener.class.getName(), this);
149
150 super.contextInitialized(servletContextEvent);
151 }
152
153 public void instantiatingListeners() throws Exception {
154 if (_servletRequestListeners != null) {
155 return;
156 }
157
158 String[] listenerClassNames = StringUtil.split(
159 servletContext.getInitParameter("portalListenerClasses"));
160
161 for (String listenerClassName : listenerClassNames) {
162 instantiatingListener(listenerClassName);
163 }
164 }
165
166 @Override
167 public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
168 if (_servletRequestListeners == null) {
169 return;
170 }
171
172 for (ServletRequestListener servletRequestListener :
173 _servletRequestListeners) {
174
175 servletRequestListener.requestDestroyed(servletRequestEvent);
176 }
177 }
178
179 @Override
180 public void requestInitialized(ServletRequestEvent servletRequestEvent) {
181 if (_servletRequestListeners == null) {
182 return;
183 }
184
185 for (ServletRequestListener servletRequestListener :
186 _servletRequestListeners) {
187
188 servletRequestListener.requestInitialized(servletRequestEvent);
189 }
190 }
191
192 @Override
193 public void sessionCreated(HttpSessionEvent httpSessionEvent) {
194 if (_httpSessionListeners == null) {
195 return;
196 }
197
198 for (HttpSessionListener httpSessionListener : _httpSessionListeners) {
199 httpSessionListener.sessionCreated(httpSessionEvent);
200 }
201 }
202
203 @Override
204 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
205 if (_httpSessionListeners == null) {
206 return;
207 }
208
209 for (HttpSessionListener httpSessionListener : _httpSessionListeners) {
210 httpSessionListener.sessionDestroyed(httpSessionEvent);
211 }
212 }
213
214 @Override
215 public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
216 if (_httpSessionActivationListeners == null) {
217 return;
218 }
219
220 for (HttpSessionActivationListener httpSessionActivationListener :
221 _httpSessionActivationListeners) {
222
223 httpSessionActivationListener.sessionDidActivate(httpSessionEvent);
224 }
225 }
226
227 @Override
228 public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
229 if (_httpSessionActivationListeners == null) {
230 return;
231 }
232
233 for (HttpSessionActivationListener httpSessionActivationListener :
234 _httpSessionActivationListeners) {
235
236 httpSessionActivationListener.sessionWillPassivate(
237 httpSessionEvent);
238 }
239 }
240
241 @Override
242 public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
243 if (_httpSessionBindingListeners == null) {
244 return;
245 }
246
247 for (HttpSessionBindingListener httpSessionBindingListener :
248 _httpSessionBindingListeners) {
249
250 httpSessionBindingListener.valueBound(httpSessionBindingEvent);
251 }
252 }
253
254 @Override
255 public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
256 if (_httpSessionBindingListeners == null) {
257 return;
258 }
259
260 for (HttpSessionBindingListener httpSessionBindingListener :
261 _httpSessionBindingListeners) {
262
263 httpSessionBindingListener.valueUnbound(httpSessionBindingEvent);
264 }
265 }
266
267 @Override
268 protected void fireUndeployEvent() {
269 if (_servletContextListeners != null) {
270 ServletContextEvent servletContextEvent = new ServletContextEvent(
271 servletContext);
272
273 for (ServletContextListener servletContextListener :
274 _servletContextListeners) {
275
276 servletContextListener.contextDestroyed(servletContextEvent);
277 }
278 }
279
280 super.fireUndeployEvent();
281 }
282
283 protected void instantiatingListener(String listenerClassName)
284 throws Exception {
285
286 if (_log.isDebugEnabled()) {
287 _log.debug("Instantiating " + listenerClassName);
288 }
289
290 Object listener = InstanceFactory.newInstance(
291 pluginClassLoader, listenerClassName);
292
293 if (listener instanceof HttpSessionActivationListener) {
294 if (_httpSessionActivationListeners == null) {
295 _httpSessionActivationListeners =
296 new CopyOnWriteArrayList<HttpSessionActivationListener>();
297 }
298
299 _httpSessionActivationListeners.add(
300 (HttpSessionActivationListener)listener);
301 }
302
303 if (listener instanceof HttpSessionAttributeListener) {
304 if (_httpSessionAttributeListeners == null) {
305 _httpSessionAttributeListeners =
306 new CopyOnWriteArrayList<HttpSessionAttributeListener>();
307 }
308
309 _httpSessionAttributeListeners.add(
310 (HttpSessionAttributeListener)listener);
311 }
312
313 if (listener instanceof HttpSessionBindingListener) {
314 if (_httpSessionBindingListeners == null) {
315 _httpSessionBindingListeners =
316 new CopyOnWriteArrayList<HttpSessionBindingListener>();
317 }
318
319 _httpSessionBindingListeners.add(
320 (HttpSessionBindingListener)listener);
321 }
322
323 if (listener instanceof HttpSessionListener) {
324 if (_httpSessionListeners == null) {
325 _httpSessionListeners =
326 new CopyOnWriteArrayList<HttpSessionListener>();
327 }
328
329 _httpSessionListeners.add((HttpSessionListener)listener);
330 }
331
332 if (listener instanceof ServletContextListener) {
333 if (_servletContextListeners == null) {
334 _servletContextListeners =
335 new CopyOnWriteArrayList<ServletContextListener>();
336 }
337
338 ServletContextListener servletContextListener =
339 (ServletContextListener)listener;
340
341 _servletContextListeners.add(servletContextListener);
342
343 ServletContextEvent servletContextEvent = new ServletContextEvent(
344 servletContext);
345
346 servletContextListener.contextInitialized(servletContextEvent);
347 }
348
349 if (listener instanceof ServletRequestAttributeListener) {
350 if (_servletRequestAttributeListeners == null) {
351 _servletRequestAttributeListeners =
352 new CopyOnWriteArrayList<ServletRequestAttributeListener>();
353 }
354
355 _servletRequestAttributeListeners.add(
356 (ServletRequestAttributeListener)listener);
357 }
358
359 if (listener instanceof ServletRequestListener) {
360 if (_servletRequestListeners == null) {
361 _servletRequestListeners =
362 new CopyOnWriteArrayList<ServletRequestListener>();
363 }
364
365 _servletRequestListeners.add((ServletRequestListener)listener);
366 }
367 }
368
369 private static Log _log = LogFactoryUtil.getLog(
370 SecurePluginContextListener.class);
371
372 private List<HttpSessionActivationListener> _httpSessionActivationListeners;
373 private List<HttpSessionAttributeListener> _httpSessionAttributeListeners;
374 private List<HttpSessionBindingListener> _httpSessionBindingListeners;
375 private List<HttpSessionListener> _httpSessionListeners;
376 private List<ServletContextListener> _servletContextListeners;
377 private List<ServletRequestAttributeListener>
378 _servletRequestAttributeListeners;
379 private List<ServletRequestListener> _servletRequestListeners;
380
381 }