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

📄 usermngimpl.java

📁 JEECSM是JavaEE版网站管理系统(Java Enterprise Edition Content Manage System)的简称。 基于java技术开发
💻 JAVA
字号:
package com.jeecms.core.manager.impl;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

import org.apache.commons.lang.StringUtils;
import org.springframework.util.Assert;

import com.jeecms.core.JeeCoreManagerImpl;
import com.jeecms.core.dao.UserDao;
import com.jeecms.core.entity.User;
import com.jeecms.core.exception.UserRegisterException;
import com.jeecms.core.manager.UserMng;
import com.ponyjava.common.hibernate3.Updater;
import com.ponyjava.common.struts2.ContextPvd;
import com.ponyjava.common.util.PwdEncoder;

public class UserMngImpl extends JeeCoreManagerImpl<User> implements UserMng {
	@Override
	public User authenticate(String loginName, String password) {
		User user = getUserByLoginName(loginName);
		if (user != null) {
			String md5Pwd = pwdEncoder.encodePassword(password);
			if (md5Pwd.equals(user.getPassword())) {
				return user;
			}
		}
		return null;
	}

	@Override
	public User login(String loginName, String password) {
		User united = authenticate(loginName, password);
		updateLoginInfo(united);
		contextPvd.setSessionAttr(User.USER_KEY, united);
		return united;
	}

	@Override
	public boolean updatePassword(User user, String oldPwd, String newPwd) {
		if (pwdEncoder.isPasswordValid(user.getPassword(), oldPwd)) {
			user.setPassword(pwdEncoder.encodePassword(newPwd));
			update(user);
			return true;
		} else {
			return false;
		}
	}

	@Override
	public void updatePassword(Long id, String newPwd) {
		User united = load(id);
		united.setPassword(pwdEncoder.encodePassword(newPwd));
		update(united);
	}

	@Override
	public void updateLoginInfo(User admin) {
		admin.setLastLoginTime(admin.getCurrentLoginTime());
		admin.setLastLoginIp(admin.getCurrentLoginIp());
		admin.setCurrentLoginTime(new java.sql.Timestamp(System
				.currentTimeMillis()));
		admin.setCurrentLoginIp(contextPvd.getRemoteIp());
		if (admin.getLoginCount() == null || admin.getLoginCount() < 0) {
			admin.setLoginCount(0L);
		}
		admin.setLoginCount(admin.getLoginCount() + 1);
	}

	/**
	 * 通过登录名查找用户,并使用缓存。
	 * 
	 * @param loginName
	 * @return 返回用户。用户不存在返回null。
	 */
	@Override
	public User getUserByLoginName(String loginName) {
		Element e = userLoginNameCache.get(loginName);
		if (e != null) {
			Serializable userId = (Serializable) e.getObjectValue();
			return load(userId);
		} else {
			User user = getUserDao().getUserByLoginName(loginName);
			if (user != null) {
				userLoginNameCache.put(new Element(loginName, user.getId()));
			}
			return user;
		}
	}

	@Override
	public User register(User user, boolean isExist) {
		Assert.notNull(user);
		Assert.isTrue(!StringUtils.isBlank(user.getLoginName()));
		User origUser = getUserByLoginName(user.getLoginName());
		if (isExist) {
			if (origUser == null) {
				throw new UserRegisterException("用户不存在!");
			}
			return user;
		} else {
			if (origUser != null) {
				throw new UserRegisterException("该用户名已注册!");
			}
			return save(user);
		}
	}

	@Override
	public Object updateByUpdater(Updater updater) {
		User udt = (User) updater.getBean();
		// 密码加密
		String p = udt.getPassword();
		if (!StringUtils.isBlank(p)) {
			udt.setPassword(pwdEncoder.encodePassword(p));
		} else {
			udt.setPassword(null);
		}
		// 处理缓存
		String afterName = udt.getLoginName();
		if (afterName != null) {
			Long id = udt.getId();
			User before = load(id);
			String beforeName = before.getLoginName();
			if (!afterName.equals(beforeName)) {
				userLoginNameCache.remove(beforeName);
				userLoginNameCache.put(new Element(afterName, id));
			}
		}

		User after = (User) super.updateByUpdater(updater);
		return after;
	}

	@Override
	public User save(User user) {
		Assert.notNull(user);
		Assert.isTrue(!StringUtils.isBlank(user.getPassword()), "密码不能为空!");
		// 密码加密
		String p = pwdEncoder.encodePassword(user.getPassword());
		user.setPassword(p);
		// 是否禁用
		if (user.getDisabled() == null) {
			user.setDisabled(false);
		}
		// 初始化信息
		String ip = contextPvd.getRemoteIp();
		Date now = new Timestamp(System.currentTimeMillis());
		user.setCreateTime(now);
		user.setCurrentLoginIp(ip);
		user.setCurrentLoginTime(now);
		user.setLastLoginIp(ip);
		user.setLastLoginTime(now);
		user.setLoginCount(0L);
		super.save(user);
		// 处理缓存
		userLoginNameCache.put(new Element(user.getLoginName(), user.getId()));
		return user;
	}

	@Override
	public User load(Serializable id) {
		User user = super.load(id);
		return user;
	}

	@Override
	public User deleteById(Serializable id) {
		User user = super.deleteById(id);
		// 处理缓存
		if (user != null) {
			Element e = userLoginNameCache.get(user.getLoginName());
			if (e != null) {
				userLoginNameCache.remove(user.getLoginName());
			}
		}
		return user;
	}

	private PwdEncoder pwdEncoder;
	private Cache userLoginNameCache;
	private ContextPvd contextPvd;

	public void setUserDao(UserDao dao) {
		super.setDao(dao);
	}

	public UserDao getUserDao() {
		return (UserDao) super.getDao();
	}

	public PwdEncoder getPwdEncoder() {
		return pwdEncoder;
	}

	public void setPwdEncoder(PwdEncoder pwdEncoder) {
		this.pwdEncoder = pwdEncoder;
	}

	public Cache getUserLoginNameCache() {
		return userLoginNameCache;
	}

	public void setUserLoginNameCache(Cache userLoginNameCache) {
		this.userLoginNameCache = userLoginNameCache;
	}

	public ContextPvd getContextPvd() {
		return contextPvd;
	}

	public void setContextPvd(ContextPvd contextPvd) {
		this.contextPvd = contextPvd;
	}

}

⌨️ 快捷键说明

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