⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userdao.java

📁 EasyJForum 是一个基于 Java 技术的免费社区论坛软件系统
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package com.hongshee.ejforum.data;

/**
 * <p>Title: UserDAO.java</p>
 * <p>Description: Forum user management data access object</p>
 * <p>Copyright: Hongshee Software 2007</p>
 * @author jackie du
 * @version 1.0
 */

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Cookie;

import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

import com.hongshee.ejforum.common.AppContext;
import com.hongshee.ejforum.common.ForumSetting;
import com.hongshee.ejforum.common.CacheManager;
import com.hongshee.ejforum.common.IConstants;
import com.hongshee.ejforum.util.AppUtils;
import com.hongshee.ejforum.util.MyFileUpload;
import com.hongshee.ejforum.util.PageUtils;
import com.hongshee.ejforum.util.MyFileUpload.UploadVO;
import com.hongshee.ejforum.data.BoardDAO.BoardVO;
import com.hongshee.ejforum.data.GroupDAO.GroupVO;

public class UserDAO extends EntityDAO 
{
    private static UserDAO _dao = null;

    protected UserDAO()
    {}

    public static UserDAO getInstance()
    {
        if (_dao == null)
        {
            _dao = new UserDAO();
        }
        return _dao;
    } 
        
    /**
     * Register a new user
     * @param 
     *      request - HttpServletRequest
     * @return none
     * @throws SQLException
     * @since 1.0
     */
    public String registerUser(HttpServletRequest request) throws Exception
    {
        String[] reserveWords = null;
        ForumSetting setting = ForumSetting.getInstance();
        String text = setting.getString(ForumSetting.ACCESS, "reserveWords").replace("\r", "");
        if (text.length() > 0)
            reserveWords = text.split("\n");
        
        String userID = PageUtils.getParam(request,"userID").replace(" ", "");
        String nickname = PageUtils.getHTMLParam(request,"nickname");
        
        if (reserveWords != null && reserveWords.length > 0)
        {
            for (int i=0; i<reserveWords.length; i++)
            {
                text = reserveWords[i].trim();
                if (text.length() == 0) continue;
                if (userID.indexOf(text) >= 0 
                        || nickname.indexOf(text) >= 0)
                    return "注册失败:此用户名或昵称中包含不合法字符,请重新输入";
            }
        }
        
        String email = PageUtils.getParam(request,"email");
        if (email.length() == 0)
            return "注册失败:用户 Email 地址不能为空,请重新输入";
            
        Connection conn = null;
        PreparedStatement pstmtInsert = null;
        try
        {
            String remoteIP = request.getRemoteAddr();
            String groupID = "1";
            String pwd = PageUtils.getParam(request,"pwd");
            String digest = AppUtils.digestData(pwd);

            if (nickname == null || nickname.trim().length() == 0)
            {
                nickname = userID;
            }
            
            String state = "N";
            String registerType = setting.getString(ForumSetting.ACCESS, "registerType");
            if (registerType != null && registerType.equalsIgnoreCase("close"))
                state = "A";

            String isMailPub = PageUtils.getParam(request,"isMailPub");
            if (isMailPub == null || isMailPub.length() == 0)
                isMailPub = "F";
            
            int credits = setting.getInt(ForumSetting.CREDITS, "userInitValue");
            
            conn = dbManager.getConnection();
            pstmtInsert = conn.prepareStatement(adapter.User_Insert);
            pstmtInsert.setString(1, userID);
            pstmtInsert.setString(2, nickname);
            pstmtInsert.setString(3, digest);
            pstmtInsert.setString(4, email);
            pstmtInsert.setString(5, PageUtils.getHTMLParam(request,"icq"));
            pstmtInsert.setString(6, PageUtils.getHTMLParam(request,"webpage"));
            pstmtInsert.setString(7, PageUtils.getParam(request,"gender"));
            pstmtInsert.setString(8, PageUtils.getParam(request,"birth"));
            pstmtInsert.setString(9, PageUtils.getHTMLParam(request,"city"));
            pstmtInsert.setString(10, remoteIP);
            pstmtInsert.setString(11, PageUtils.getHTMLParam(request,"brief"));
            pstmtInsert.setString(12, isMailPub);
            pstmtInsert.setString(13, groupID);
            pstmtInsert.setInt(14, credits);
            pstmtInsert.setString(15, state);
            pstmtInsert.executeUpdate();
            
            if (state.equals("N"))
            {
                UserInfo userinfo = getUserInfo(userID, conn);
                if (userinfo != null)
                    userinfo.remoteIP = request.getRemoteAddr();
            
                HttpSession sess = request.getSession();
                // sess.setMaxInactiveInterval(1200);  //1200s, 20 minutes
                sess.setAttribute("userinfo", userinfo);

                Set<HttpSession> sessions = AppContext.getInstance().getSessions();
                sessions.add(sess);
            }
            else if (state.equals("A"))
            {
                String mailEvents = 
                    setting.getString(ForumSetting.FUNCTIONS, "mailEvents");
                if (mailEvents.indexOf("audit") >= 0)
                {
                    ArrayList<OptionVO> users = this.getAuditHandlers(conn);
                    if (users != null && users.size() > 0)
                    {
                        String[] toAddress = new String[users.size()];
                        for (int i=0; i<toAddress.length; i++)
                        {
                            toAddress[i] = users.get(i).value;
                        }
                        String subject = setting.getForumName() + ": 有新用户注册并等待审核";
                        String content = "等待审核用户:" + userID   
                                       + PageUtils.getSysMailFooter(request);
                        AppUtils.sendMail(toAddress, subject, content);
                    }
                }
            }
            return "OK";
        }
        catch(SQLException sqle)
        {
            if (isExistedID(userID, conn))
                return "注册失败:此用户名已经被人使用,请重新输入";
            else if (isExistedMail(email, conn))
                return "注册失败:此 Email 地址已经被其他用户使用,请重新输入";
            else
                throw sqle;
        }
        finally
        {
            dbManager.closePStatement(pstmtInsert);
            dbManager.closeConnection(conn);
        }
    }

    /**
     * Add root admin user to DB if it does not exists 
     * @param 
     *      adminUser - Root admin user ID
     *      adminMail - Root admin user email address
     * @return none
     * @throws Exception
     * @since 1.0
     */
    public void initAdminUser(String adminUserID, String adminMail) throws Exception
    {
        Connection conn = null;
        PreparedStatement pstmtInsert = null;
        try
        {
            conn = dbManager.getConnection();
            if (!isExistedID(adminUserID, conn))
            {
                String nickname = "系统管理员";
                String groupID = "A";
                String digest = AppUtils.digestData(adminUserID);
                digest = AppUtils.digestData(digest);

                int credits = ForumSetting.getInstance().getInt(ForumSetting.CREDITS, "userInitValue");
                
                pstmtInsert = conn.prepareStatement(adapter.User_Insert);
                pstmtInsert.setString(1, adminUserID);
                pstmtInsert.setString(2, nickname);
                pstmtInsert.setString(3, digest);
                pstmtInsert.setString(4, adminMail);
                pstmtInsert.setString(5, null);
                pstmtInsert.setString(6, null);
                pstmtInsert.setString(7, "U");
                pstmtInsert.setString(8, null);
                pstmtInsert.setString(9, null);
                pstmtInsert.setString(10, null);
                pstmtInsert.setString(11, null);
                pstmtInsert.setString(12, "F");
                pstmtInsert.setString(13, groupID);
                pstmtInsert.setInt(14, credits);
                pstmtInsert.setString(15, "N");
                pstmtInsert.executeUpdate();
            }
        }
        finally
        {
            dbManager.closePStatement(pstmtInsert);
            dbManager.closeConnection(conn);
        }
    }
    
    /**
     * Update user base info
     * @param 
     *      request - HttpServletRequest
     * @return none
     * @throws SQLException
     * @since 1.0
     */
    @SuppressWarnings("unchecked")
    public String updateUser(HttpServletRequest request, UserInfo userinfo) throws SQLException
    {
        String[] reserveWords = null;
        ForumSetting setting = ForumSetting.getInstance();
        String text = setting.getString(ForumSetting.ACCESS, "reserveWords").replace("\r", "");
        if (text.length() > 0)
            reserveWords = text.split("\n");
        
        String nickname = PageUtils.getHTMLParam(request,"nickname");
        if (reserveWords != null && reserveWords.length > 0)
        {
            for (int i=0; i<reserveWords.length; i++)
            {
                text = reserveWords[i].trim();
                if (text.length() == 0) continue;
                if (nickname.indexOf(text) >= 0)
                    return "更新失败:昵称中包含不合法字符,请重新输入";
            }
        }
        
        String isMailPub = request.getParameter("isMailPub");
        if (isMailPub == null || isMailPub.length() == 0)
            isMailPub = "F";
        
        ArrayList<Object> paramValues = new ArrayList<Object>();
        paramValues.add(nickname);
        paramValues.add(PageUtils.getParam(request,"email"));
        paramValues.add(PageUtils.getHTMLParam(request,"icq"));
        paramValues.add(PageUtils.getHTMLParam(request,"webpage"));
        paramValues.add(PageUtils.getParam(request,"gender"));
        paramValues.add(PageUtils.getParam(request,"birth"));
        paramValues.add(PageUtils.getHTMLParam(request,"city"));
        paramValues.add(isMailPub);
        paramValues.add(userinfo.userID);
        
        Connection conn = dbManager.getConnection();
        try
        {
            this.execUpdateSql(adapter.User_Update, paramValues, conn);
            return "OK";
        }
        catch(SQLException sqle)
        {
            if (this.isExistedMail(PageUtils.getParam(request,"email"),
                                   userinfo.userID, conn))
                return "更新失败:此 Email 地址已经被其他用户使用,请重新输入";
            else
                throw sqle;
        }
        finally
        {
            dbManager.closeConnection(conn);
        }
    }

    /**
     * Modify user special info
     * @param 
     *      request - HttpServletRequest
     * @return none
     * @throws SQLException
     * @since 1.0
     */
    @SuppressWarnings("unchecked")
    public String modSpecInfo(HttpServletRequest request, UserInfo userinfo) throws SQLException
    {
        ArrayList<UploadVO> attaches = null;
        try
        {
            attaches = MyFileUpload.getInstance().upload(request, "avatar");
        }
        catch(SizeLimitExceededException e)
        {
            return "上传头像出错:文件大小超过限制,允许的最大值为:" 
                    + ((SizeLimitExceededException)e).getPermittedSize() + " 字节。";
        }
        catch(Exception e)
        {
            return "上传头像出错:" + e.getMessage();
        }
        
        String avatar = null;
        if (attaches != null && attaches.size() > 0)
        {
            UploadVO aFile = attaches.get(0);
            avatar = aFile.localname;
        }
        else
        {
            avatar = PageUtils.decodeParam((String)request.getAttribute("urlavatar"));
        }
        
        if (avatar.startsWith("avatar/"))
            avatar = avatar.substring(7);
        
        String brief = PageUtils.decodeParam((String)request.getAttribute("brief"))
                       .replace("\"", "&quot;").replace("<", "&lt;").replace(">", "&gt;");
        
        ArrayList<Object> paramValues = new ArrayList<Object>();
        paramValues.add(avatar);
        paramValues.add(brief);
        paramValues.add(userinfo.userID);
        
        this.execUpdateSql(adapter.User_ModSpecInfo, paramValues);
        return "OK";
    }
    
    /**
     * Do user login
     * @param 
     *      request - HttpServletRequest
     *      response - HttpServletResponse
     * @return success or fail message
     * @throws Exception
     * @since 1.0
     */
    public String doLogin(HttpServletRequest request, HttpServletResponse response) 

⌨️ 快捷键说明

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