📄 userdao.java
字号:
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("\"", """).replace("<", "<").replace(">", ">");
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 + -