All Downloads are FREE. Search and download functionalities are using the official Maven repository.

clime.messadmin.model.Session Maven / Gradle / Ivy

Go to download

Notification system and Session administration for J2EE Web Applications

There is a newer version: 4.1.1
Show newest version
/**
 * 
 */
package clime.messadmin.model;

import java.util.Hashtable;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;

import clime.messadmin.core.Constants;
import clime.messadmin.filter.MessAdminRequestWrapper;
import clime.messadmin.filter.MessAdminResponseWrapper;
import clime.messadmin.utils.SessionUtils;
import clime.messadmin.utils.StringUtils;

/**
 * @author Cédrik LIME
 */
public class Session implements HttpSessionActivationListener, IRequestListener {
	protected final SessionInfo sessionInfo;
	protected final Request cumulativeRequests = new Request(null);
	/**
	 * Map of user-defined data to store in the Session scope.
	 * This is mainly used for plugins (key == plugin FQ name, for example)
	 */
	protected Map userData;

	/**
	 * @param session
	 */
	public Session(HttpSession session) {
		super();
		sessionInfo = new SessionInfo(session);
	}

	/**
	 * @return Returns the sessionInfo.
	 */
	public ISessionInfo getSessionInfo() {
		return sessionInfo;
	}

	/**
	 * @return Returns the userData.
	 */
	// implementation note: this should be synchronized, but
	// we don't really care if multiple copies are created.
	public Map getUserData() {
		if (userData == null) {
			userData = new Hashtable();
		}
		return userData;
	}

	/**
	 * {@inheritDoc}
	 */
	public void sessionDidActivate(final HttpSessionEvent se) {
		sessionInfo.setHttpSession(se.getSession());
		//FIXME can the id change? Need to read the Servlet spec.
	}
	/**
	 * {@inheritDoc}
	 */
	public void sessionWillPassivate(final HttpSessionEvent se) {
		sessionInfo.setHttpSession(null);
	}


	/**
	 * If message if blank or null, remove HttpSession attribute, otherwise inject message into HttpSessions
	 * @param message
	 */
	public boolean injectMessage(String message) {
		boolean inject = StringUtils.isNotBlank(message);
		boolean actionDone = false;
		if (inject) {
			if (! message.equals(getSessionInfo().getAttribute(Constants.SESSION_MESSAGE_KEY))) {
				// Setting message
				getSessionInfo().setAttribute(Constants.SESSION_MESSAGE_KEY, message);
				actionDone = true;
			}
		} else {
			if (getSessionInfo().getAttribute(Constants.SESSION_MESSAGE_KEY) != null) {
				// Removing message
				getSessionInfo().removeAttribute(Constants.SESSION_MESSAGE_KEY);
				actionDone = true;
			}
		}
		return actionDone;
	}


	/*****************************************/
	/**	Request/Response Listener methods	**/
	/*****************************************/

	/** {@inheritDoc} */
	public void requestInitialized(final HttpServletRequest request, final ServletContext servletContext) {
		if (request == null || servletContext == null) {
			return;
		}
		final HttpSession httpSession = request.getSession(false);
		if (httpSession == null) {
			// should never happen!
			return;
		} // else
		try {
			sessionInfo.authType	= request.getAuthType();
			sessionInfo.remoteHost	= request.getRemoteHost();//FIXME getRemoteAddr() if config says not to resolve IPs
			sessionInfo.lastRequestURL = SessionUtils.getRequestURLWithMethodAndQueryString(request);
			sessionInfo.userPrincipal = request.getUserPrincipal();
			sessionInfo.remoteUser	= request.getRemoteUser();
			sessionInfo.isSecure	= request.isSecure();
			sessionInfo.userAgent	= request.getHeader("user-agent");//$NON-NLS-1$
			sessionInfo.referer		= request.getHeader("referer");//$NON-NLS-1$
			sessionInfo.sslCipherSuite	= (String)request.getAttribute("javax.servlet.request.cipher_suite");//$NON-NLS-1$
			sessionInfo.sslAlgorithmSize	= (Integer)request.getAttribute("javax.servlet.request.key_size");//$NON-NLS-1$
//			sessionInfo.sslCertificates	= (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");//$NON-NLS-1$
			cumulativeRequests.requestInitialized(sessionInfo.cumulativeRequestStats, request, servletContext);
		} catch (IllegalStateException ise) {
			// session is invalidated
		}
	}

	/** {@inheritDoc} */
	public void requestDestroyed(final MessAdminRequestWrapper request, final MessAdminResponseWrapper response, final ServletContext servletContext) {
		if (request == null || response == null || servletContext == null) {
			return;
		}
		final HttpSession httpSession = request.getSession(false);
		if (httpSession == null) {
			// should never happen!
			return;
		} // else
		try {
			// request not already counted
			cumulativeRequests.requestDestroyed(sessionInfo.cumulativeRequestStats, request, response, servletContext);
		} catch (IllegalStateException ise) {
			// session is invalidated
		}
	}

	/** {@inheritDoc} */
	public void requestException(Exception e, MessAdminRequestWrapper request, MessAdminResponseWrapper response, ServletContext servletContext) {
		if (request == null || response == null || servletContext == null) {
			return;
		}
		cumulativeRequests.requestException(sessionInfo.cumulativeRequestStats, e, request, response, servletContext);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy