1 package org.apache.turbine.services.session; 2 3 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file 9 * to you under the Apache License, Version 2.0 (the 10 * "License"); you may not use this file except in compliance 11 * with the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, 16 * software distributed under the License is distributed on an 17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 * KIND, either express or implied. See the License for the 19 * specific language governing permissions and limitations 20 * under the License. 21 */ 22 23 24 import java.io.Serializable; 25 26 import javax.servlet.http.HttpSessionActivationListener; 27 import javax.servlet.http.HttpSessionEvent; 28 import javax.servlet.http.HttpSessionListener; 29 30 import org.apache.turbine.services.TurbineServices; 31 32 /** 33 * This class is a listener for both session creation and destruction, 34 * and for session activation and passivation. It must be configured 35 * via your web application's <code>web.xml</code> deployment 36 * descriptor as follows for the container to call it: 37 * 38 * <pre> 39 * <listener> 40 * <listener-class> 41 * org.apache.turbine.session.SessionListener 42 * </listener-class> 43 * </listener> 44 * </pre> 45 * 46 * <code><listener></code> elements can occur between 47 * <code><context-param></code> and <code><servlet></code> 48 * elements in your deployment descriptor. 49 * 50 * The {@link #sessionCreated(HttpSessionEvent)} callback will 51 * automatically add an instance of this listener to any newly created 52 * <code>HttpSession</code> for detection of session passivation and 53 * re-activation. 54 * 55 * @since 2.3 56 * @version $Id: SessionListener.java 1773378 2016-12-09 13:19:59Z tv $ 57 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a> 58 * @author <a href="mailto:dlr@apache.org">Daniel Rall</a> 59 * @see javax.servlet.http.HttpSessionListener 60 */ 61 public class SessionListener 62 implements HttpSessionListener, HttpSessionActivationListener, Serializable 63 { 64 // ---- HttpSessionListener implementation ----------------------------- 65 66 /** 67 * Serial version. 68 */ 69 private static final long serialVersionUID = -8083730704842809870L; 70 71 /** 72 * The session service. 73 */ 74 private SessionService sessionService; 75 76 /** 77 * Lazy initialization 78 * 79 * @return the sessionService 80 */ 81 private SessionService getSessionService() 82 { 83 // don't care about synchronization, lookup is cheap 84 if (sessionService == null) 85 { 86 sessionService = (SessionService)TurbineServices.getInstance().getService(SessionService.SERVICE_NAME); 87 } 88 89 return sessionService; 90 } 91 92 /** 93 * Called by the servlet container when a new session is created 94 * 95 * @param event Session creation event. 96 */ 97 @Override 98 public void sessionCreated(HttpSessionEvent event) 99 { 100 getSessionService().addSession(event.getSession()); 101 event.getSession().setAttribute(getClass().getName(), this); 102 } 103 104 /** 105 * Called by the servlet container when a session is destroyed 106 * 107 * @param event Session destruction event. 108 */ 109 @Override 110 public void sessionDestroyed(HttpSessionEvent event) 111 { 112 getSessionService().removeSession(event.getSession()); 113 } 114 115 116 // ---- HttpSessionActivationListener implementation ------------------- 117 118 /** 119 * Called by the servlet container when an existing session is 120 * (re-)activated. 121 * 122 * @param event Session activation event. 123 */ 124 @Override 125 public void sessionDidActivate(HttpSessionEvent event) 126 { 127 getSessionService().addSession(event.getSession()); 128 } 129 130 /** 131 * Called by the servlet container when a an existing session is 132 * passivated. 133 * 134 * @param event Session passivation event. 135 */ 136 @Override 137 public void sessionWillPassivate(HttpSessionEvent event) 138 { 139 getSessionService().removeSession(event.getSession()); 140 } 141 }