001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.servlet.filters.compoundsessionid.CompoundSessionIdHttpSession;
018 import com.liferay.portal.kernel.servlet.filters.compoundsessionid.CompoundSessionIdSplitterUtil;
019
020 import java.util.ArrayList;
021 import java.util.List;
022
023 import javax.servlet.http.HttpSessionActivationListener;
024 import javax.servlet.http.HttpSessionAttributeListener;
025 import javax.servlet.http.HttpSessionBindingEvent;
026 import javax.servlet.http.HttpSessionBindingListener;
027 import javax.servlet.http.HttpSessionEvent;
028 import javax.servlet.http.HttpSessionListener;
029
030
039 public class PortletSessionListenerManager
040 implements HttpSessionActivationListener, HttpSessionAttributeListener,
041 HttpSessionBindingListener, HttpSessionListener {
042
043 public static void addHttpSessionActivationListener(
044 HttpSessionActivationListener httpSessionActivationListener) {
045
046 _httpSessionActivationListeners.add(httpSessionActivationListener);
047 }
048
049 public static void addHttpSessionAttributeListener(
050 HttpSessionAttributeListener httpSessionAttributeListener) {
051
052 _httpSessionAttributeListeners.add(httpSessionAttributeListener);
053 }
054
055 public static void addHttpSessionBindingListener(
056 HttpSessionBindingListener httpSessionBindingListener) {
057
058 _httpSessionBindingListeners.add(httpSessionBindingListener);
059 }
060
061 public static void addHttpSessionListener(
062 HttpSessionListener httpSessionListener) {
063
064 _httpSessionListeners.add(httpSessionListener);
065 }
066
067 public static void removeHttpSessionActivationListener(
068 HttpSessionActivationListener httpSessionActivationListener) {
069
070 _httpSessionActivationListeners.remove(httpSessionActivationListener);
071 }
072
073 public static void removeHttpSessionAttributeListener(
074 HttpSessionAttributeListener httpSessionAttributeListener) {
075
076 _httpSessionAttributeListeners.remove(httpSessionAttributeListener);
077 }
078
079 public static void removeHttpSessionBindingListener(
080 HttpSessionBindingListener httpSessionBindingListener) {
081
082 _httpSessionBindingListeners.remove(httpSessionBindingListener);
083 }
084
085 public static void removeHttpSessionListener(
086 HttpSessionListener httpSessionListener) {
087
088 _httpSessionListeners.remove(httpSessionListener);
089 }
090
091 @Override
092 public void attributeAdded(
093 HttpSessionBindingEvent httpSessionBindingEvent) {
094
095 httpSessionBindingEvent = getHttpSessionBindingEvent(
096 httpSessionBindingEvent);
097
098 for (HttpSessionAttributeListener httpSessionAttributeListener :
099 _httpSessionAttributeListeners) {
100
101 httpSessionAttributeListener.attributeAdded(
102 httpSessionBindingEvent);
103 }
104 }
105
106 @Override
107 public void attributeRemoved(
108 HttpSessionBindingEvent httpSessionBindingEvent) {
109
110 httpSessionBindingEvent = getHttpSessionBindingEvent(
111 httpSessionBindingEvent);
112
113 for (HttpSessionAttributeListener httpSessionAttributeListener :
114 _httpSessionAttributeListeners) {
115
116 httpSessionAttributeListener.attributeRemoved(
117 httpSessionBindingEvent);
118 }
119 }
120
121 @Override
122 public void attributeReplaced(
123 HttpSessionBindingEvent httpSessionBindingEvent) {
124
125 httpSessionBindingEvent = getHttpSessionBindingEvent(
126 httpSessionBindingEvent);
127
128 for (HttpSessionAttributeListener httpSessionAttributeListener :
129 _httpSessionAttributeListeners) {
130
131 httpSessionAttributeListener.attributeReplaced(
132 httpSessionBindingEvent);
133 }
134 }
135
136 @Override
137 public void sessionCreated(HttpSessionEvent httpSessionEvent) {
138 httpSessionEvent = getHttpSessionEvent(httpSessionEvent);
139
140 Thread currentThread = Thread.currentThread();
141
142 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
143
144 try {
145 for (HttpSessionListener httpSessionListener :
146 _httpSessionListeners) {
147
148 Class<?> clazz = httpSessionListener.getClass();
149
150 ClassLoader classLoader = clazz.getClassLoader();
151
152 currentThread.setContextClassLoader(classLoader);
153
154 httpSessionListener.sessionCreated(httpSessionEvent);
155 }
156 }
157 finally {
158 currentThread.setContextClassLoader(contextClassLoader);
159 }
160 }
161
162 @Override
163 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
164 httpSessionEvent = getHttpSessionEvent(httpSessionEvent);
165
166 for (HttpSessionListener httpSessionListener : _httpSessionListeners) {
167 httpSessionListener.sessionDestroyed(httpSessionEvent);
168 }
169 }
170
171 @Override
172 public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
173 httpSessionEvent = getHttpSessionEvent(httpSessionEvent);
174
175 for (HttpSessionActivationListener httpSessionActivationListener :
176 _httpSessionActivationListeners) {
177
178 httpSessionActivationListener.sessionDidActivate(httpSessionEvent);
179 }
180 }
181
182 @Override
183 public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
184 httpSessionEvent = getHttpSessionEvent(httpSessionEvent);
185
186 for (HttpSessionActivationListener httpSessionActivationListener :
187 _httpSessionActivationListeners) {
188
189 httpSessionActivationListener.sessionWillPassivate(
190 httpSessionEvent);
191 }
192 }
193
194 @Override
195 public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
196 httpSessionBindingEvent = getHttpSessionBindingEvent(
197 httpSessionBindingEvent);
198
199 for (HttpSessionBindingListener httpSessionBindingListener :
200 _httpSessionBindingListeners) {
201
202 httpSessionBindingListener.valueBound(httpSessionBindingEvent);
203 }
204 }
205
206 @Override
207 public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
208 httpSessionBindingEvent = getHttpSessionBindingEvent(
209 httpSessionBindingEvent);
210
211 for (HttpSessionBindingListener httpSessionBindingListener :
212 _httpSessionBindingListeners) {
213
214 httpSessionBindingListener.valueUnbound(httpSessionBindingEvent);
215 }
216 }
217
218 protected HttpSessionBindingEvent getHttpSessionBindingEvent(
219 HttpSessionBindingEvent httpSessionBindingEvent) {
220
221 if (CompoundSessionIdSplitterUtil.hasSessionDelimiter()) {
222 CompoundSessionIdHttpSession compoundSessionIdHttpSession =
223 new CompoundSessionIdHttpSession(
224 httpSessionBindingEvent.getSession());
225
226 httpSessionBindingEvent = new HttpSessionBindingEvent(
227 compoundSessionIdHttpSession, httpSessionBindingEvent.getName(),
228 httpSessionBindingEvent.getValue());
229 }
230
231 return httpSessionBindingEvent;
232 }
233
234 protected HttpSessionEvent getHttpSessionEvent(
235 HttpSessionEvent httpSessionEvent) {
236
237 if (CompoundSessionIdSplitterUtil.hasSessionDelimiter()) {
238 CompoundSessionIdHttpSession compoundSessionIdHttpSession =
239 new CompoundSessionIdHttpSession(httpSessionEvent.getSession());
240
241 httpSessionEvent = new HttpSessionEvent(
242 compoundSessionIdHttpSession);
243 }
244
245 return httpSessionEvent;
246 }
247
248 private static List<HttpSessionActivationListener>
249 _httpSessionActivationListeners =
250 new ArrayList<HttpSessionActivationListener>();
251 private static List<HttpSessionAttributeListener>
252 _httpSessionAttributeListeners =
253 new ArrayList<HttpSessionAttributeListener>();
254 private static List<HttpSessionBindingListener>
255 _httpSessionBindingListeners =
256 new ArrayList<HttpSessionBindingListener>();
257 private static List<HttpSessionListener> _httpSessionListeners =
258 new ArrayList<HttpSessionListener>();
259
260 }