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