📄 usermngimpl.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 + -