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