userwatcher.java

来自「jGossip是一个简单而功能强大的Java论坛软件(消息板)」· Java 代码 · 共 178 行

JAVA
178
字号
/*
 * $$Id: UserWatcher.java,v 1.15 2004/05/30 20:03:57 bel70 Exp $$
 *
 * ***** BEGIN LICENSE BLOCK *****
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and
 * limitations under the License.
 *
 * The Original Code is JGossip forum code.
 *
 * The Initial Developer of the Original Code is the JResearch, Org.
 * Portions created by the Initial Developer are Copyright (C) 2004
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *              Dmitry Belov <bel@jresearch.org>
 *
 * ***** END LICENSE BLOCK ***** */
/*
 * Created on 24.05.2003
 *
 */
package org.jresearch.gossip.listeners;

import org.apache.struts.Globals;
import org.apache.struts.util.MessageResources;

import org.jresearch.gossip.IConst;
import org.jresearch.gossip.beans.user.Entry;
import org.jresearch.gossip.beans.user.User;
import org.jresearch.gossip.configuration.Configurator;
import org.jresearch.gossip.dao.ForumDAO;
import org.jresearch.gossip.dao.UserDAO;
import org.jresearch.gossip.exception.ConfiguratorException;
import org.jresearch.gossip.log.ForumLog;

import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

import javax.sql.DataSource;


/**
 * DOCUMENT ME!
 *
 * @author Bel
 */
public class UserWatcher implements HttpSessionAttributeListener {
    /* (non-Javadoc)
    * @see javax.servlet.http.HttpSessionAttributeListener#attributeAdded(javax.servlet.http.HttpSessionBindingEvent)
    */
    private Entry getCurrentEntry(HttpSessionBindingEvent evt) {
        User user = (User) evt.getSession().getAttribute(IConst.SESSION.USER_KEY);
        Entry entry = new Entry(user.getName(), evt.getSession().getId(),
                user.getIp());

        return entry;
    }

    /**
     * DOCUMENT ME!
     *
     * @param evt DOCUMENT ME!
     */
    public void attributeAdded(HttpSessionBindingEvent evt) {
        if (evt.getName().equals(IConst.SESSION.USER_KEY)) {
            HttpSession session = evt.getSession();
            ServletContext app = session.getServletContext();
            ForumDAO forumdao = ForumDAO.getInstance();
            User user = (User) evt.getSession().getAttribute(IConst.SESSION.USER_KEY);

            try {
                forumdao.setDataSource((DataSource) app.getAttribute(
                        IConst.CONTEXT.DS_KEY));

                if (user.getStatus() > 0) {
                    forumdao.removeEntry(user.getName());
                }

                forumdao.addEntry(getCurrentEntry(evt));

                //write message in forum log
                StringBuffer sb = new StringBuffer();
                sb.append(user.getIp());
                sb.append(" User:");
                sb.append(user.getName());
                sb.append(" ");
                sb.append(((MessageResources) app.getAttribute(Globals.MESSAGES_KEY +
                        Configurator.getInstance().get(IConst.CONFIG.MODULE_PREFIX))).getMessage(
                        "logs.LOG1"));
                sb.append(" ");
                sb.append(session.getId());
                ForumLog.getInstance().getForumLogger().info(sb.toString());
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            } catch (ConfiguratorException e) {
                e.printStackTrace();
            }

            app.log("UserWatcher: User bean is added with login=" +
                user.getName());
        }
    }

    /* (non-Javadoc)
     * @see javax.servlet.http.HttpSessionAttributeListener#attributeRemoved(javax.servlet.http.HttpSessionBindingEvent)
     */
    public void attributeRemoved(HttpSessionBindingEvent evt) {
        if (evt.getName().equals(IConst.SESSION.USER_KEY)) {
            HttpSession session = evt.getSession();
            ServletContext app = session.getServletContext();

            User user = (User) evt.getValue();

            UserDAO dao = UserDAO.getInstance();
            ForumDAO forumdao = ForumDAO.getInstance();

            try {
                dao.setDataSource((DataSource) app.getAttribute(
                        IConst.CONTEXT.DS_KEY));
                forumdao.removeEntry(session.getId());

                if (user.getStatus() > 0) {
                    dao.updateIntime(user.getName());
                }
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            }

            app.log("UserWatcher: User bean with login=" + user.getName() +
                " is removed");
        }
    }

    /* (non-Javadoc)
     * @see javax.servlet.http.HttpSessionAttributeListener#attributeReplaced(javax.servlet.http.HttpSessionBindingEvent)
     */
    public void attributeReplaced(HttpSessionBindingEvent evt) {
        if (evt.getName().equals(IConst.SESSION.USER_KEY)) {
            HttpSession session = evt.getSession();
            ServletContext app = session.getServletContext();

            ForumDAO forumdao = ForumDAO.getInstance();
            User user = (User) evt.getSession().getAttribute(IConst.SESSION.USER_KEY);

            try {
                forumdao.setDataSource((DataSource) app.getAttribute(
                        IConst.CONTEXT.DS_KEY));

                if (user.getStatus() > 0) {
                    forumdao.removeEntry(user.getName());
                }

                if (!forumdao.isEntryExist(session.getId())) {
                    forumdao.addEntry(getCurrentEntry(evt));
                } else {
                    forumdao.updateEntry(getCurrentEntry(evt));
                }
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            }

            app.log("UserWatcher: User bean is replaced, new login=" +
                user.getName());
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?