001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.concurrent.ConcurrentHashSet;
018 import com.liferay.portal.kernel.servlet.filters.compoundsessionid.CompoundSessionIdSplitterUtil;
019
020 import java.util.Set;
021 import java.util.concurrent.ConcurrentHashMap;
022 import java.util.concurrent.ConcurrentMap;
023
024 import javax.servlet.http.HttpSession;
025
026
034 public class PortletSessionTracker {
035
036 public static void add(HttpSession session) {
037 String sessionId = session.getId();
038
039 if (CompoundSessionIdSplitterUtil.hasSessionDelimiter()) {
040 sessionId = CompoundSessionIdSplitterUtil.parseSessionId(sessionId);
041 }
042
043 Set<HttpSession> sessions = _sessions.get(sessionId);
044
045 if (sessions == null) {
046 sessions = new ConcurrentHashSet<HttpSession>();
047
048 Set<HttpSession> previousSessions = _sessions.putIfAbsent(
049 sessionId, sessions);
050
051 if (previousSessions != null) {
052 sessions = previousSessions;
053 }
054 }
055
056 sessions.add(session);
057 }
058
059 public static void invalidate(String sessionId) {
060 if (CompoundSessionIdSplitterUtil.hasSessionDelimiter()) {
061 sessionId = CompoundSessionIdSplitterUtil.parseSessionId(sessionId);
062 }
063
064 Set<HttpSession> sessions = _sessions.remove(sessionId);
065
066 if (sessions == null) {
067 return;
068 }
069
070 for (HttpSession session : sessions) {
071 try {
072 session.invalidate();
073 }
074 catch (Exception e) {
075 }
076 }
077 }
078
079 private static ConcurrentMap<String, Set<HttpSession>> _sessions =
080 new ConcurrentHashMap<String, Set<HttpSession>>();
081
082 }