/*
* Copyright (C) 2013-2017 NTT DATA Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.terasoluna.gfw.web.logging;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Listener for session logging.
* <p>
* Listener for logging creation and destruction of session, activation and deactivation, session object bind <br>
* and unbind, session attribute operation.
* </p>
*/
public class HttpSessionEventLoggingListener implements HttpSessionListener,
HttpSessionAttributeListener,
HttpSessionActivationListener {
/**
* logger
*/
private static final Logger logger = LoggerFactory
.getLogger(HttpSessionEventLoggingListener.class);
/**
* Logging when object bind to the session is activated.
* <p>
* Session ID and the object that generated the event must be logged.
* </p>
* @see javax.servlet.http.HttpSessionActivationListener#sessionWillPassivate(javax.servlet.http.HttpSessionEvent)
*/
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} sessionWillPassivate : {}", session
.getId(), se.getSource());
}
}
/**
* Logging when object bind to the session is deactivated.
* <p>
* Session ID and the object that generated the event must be logged.
* </p>
* @see javax.servlet.http.HttpSessionActivationListener#sessionDidActivate(javax.servlet.http.HttpSessionEvent)
*/
@Override
public void sessionDidActivate(HttpSessionEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} sessionDidActivate : {}", session
.getId(), se.getSource());
}
}
/**
* Logging when some attribute gets added to the session.
* <p>
* Session ID, name of the object in which attribute is added and value of the object gets logged.
* </p>
* @see javax.servlet.http.HttpSessionAttributeListener#attributeAdded(javax.servlet.http.HttpSessionBindingEvent)
*/
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} attributeAdded : {}={}",
session.getId(), se.getName(), se.getValue());
}
}
/**
* Logging when some attribute gets deleted from the session.
* <p>
* Session ID, name of the object in which attribute is deleted from and value of the object gets logged.
* </p>
* @see javax.servlet.http.HttpSessionAttributeListener#attributeRemoved(javax.servlet.http.HttpSessionBindingEvent)
*/
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} attributeRemoved : {}={}", session
.getId(), se.getName(), se.getValue());
}
}
/**
* Logging when some attribute added to session gets changed.
* <p>
* Session ID, name of the object in which attribute is replaced and value of the object gets logged.
* </p>
* @see javax.servlet.http.HttpSessionAttributeListener#attributeReplaced(javax.servlet.http.HttpSessionBindingEvent)
*/
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
if (logger.isTraceEnabled()) {
HttpSession session = se.getSession();
logger.trace("SESSIONID#{} attributeReplaced : {}={}", session
.getId(), se.getName(), se.getValue());
}
}
/**
* Logging when session is created
* <p>
* Session ID and implementation class of {@link HttpSession} is logged.
* </p>
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} sessionCreated : {}", session.getId(),
se.getSource());
}
}
/**
* Logging when session is being invalidated.
* <p>
* Session ID and implementation class of {@link HttpSession} is logged.
* </p>
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
if (logger.isDebugEnabled()) {
HttpSession session = se.getSession();
logger.debug("SESSIONID#{} sessionDestroyed : {}", session.getId(),
se.getSource());
}
}
}