Преглед изворни кода

忘记密码

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@1131 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
suntg пре 10 година
родитељ
комит
6130b85cf2

+ 48 - 0
src/main/java/com/uas/platform/b2b/controller/RegisterController.java

@@ -15,9 +15,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import com.uas.platform.b2b.model.Attach;
 import com.uas.platform.b2b.model.Enterprise;
 import com.uas.platform.b2b.model.FileUpload;
+import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.EnterpriseService;
 import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.util.StringUtil;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
 /**
@@ -163,9 +166,54 @@ public class RegisterController {
 	 * @return
 	 */
 	@RequestMapping(value = "/forget/info")
+	@ResponseBody
 	public ModelMap getUserInfoByUserName(String userName) {
 		ModelMap map = new ModelMap();
+		User user = userService.findShieldUuserInfo(userName);
+		map.put("enName", StringUtil.getSheildString(user.getEnterprise().getEnName(), 5, 2));
+		map.put("userName", StringUtil.getSheildString(user.getUserName(), 1, 1));
+		map.put("userUU", user.getUserUU());
+		map.put("userEmail", StringUtil.getSheildString(user.getUserEmail(), user.getUserEmail().indexOf("@") - 2, 2));
+		User admin = userService.findUserByUserUU(user.getEnterprise().getEnAdminuu());
+		SystemSession.setUser(user);
+		if(admin != null)
+			map.put("adminEmail", StringUtil.getSheildString(admin.getUserEmail(), admin.getUserEmail().indexOf("@") - 2, 2));
 		return map;
 	}
+	
+	/**
+	 * 忘记密码,发送验证邮件
+	 * @param userName
+	 * @return
+	 */
+	@RequestMapping(value = "/forget/sendEmail")
+	@ResponseBody
+	public void sendForgetEmail(Long userUU, String type, HttpServletRequest request) {
+		userService.sendForgetEmai(userUU, type, request);
+	}
+	
+	/**
+	 * 验证忘记密码,并返回新的验证码(用于重设密码时验证)
+	 * @param userName
+	 * @return
+	 */
+	@RequestMapping(value = "/forget/check")
+	@ResponseBody
+	public ModelMap checkCode(Long userUU, String checkcode) {
+		ModelMap map = new ModelMap();
+		map.put("checkcode", userService.checkForget(userUU, checkcode));
+		return map;
+	}
+	
+	/**
+	 * 忘记密码,发送验证邮件
+	 * @param userName
+	 * @return
+	 */
+	@RequestMapping(value = "/forget/reset")
+	@ResponseBody
+	public void resetPwdByCheckcode(Long userUU, String newPwd, String checkcode) {
+		userService.resetPwdByCheckcode(userUU, newPwd, checkcode);
+	}
 
 }

+ 26 - 0
src/main/java/com/uas/platform/b2b/service/UserService.java

@@ -112,5 +112,31 @@ public interface UserService {
 	 */
 	public User updatePassword(User user, String password, String newPassword);
 	
+	/**
+	 * 获取用户的缺省信息
+	 * @param userName
+	 * @return
+	 */
+	public User findShieldUuserInfo(String userName);
+	
+	/**
+	 * 发送忘记密码激活邮件
+	 * @param type
+	 */
+	public void sendForgetEmai(Long userUU, String type, HttpServletRequest request);
+	
+	/**
+	 * 验证找回密码的验证码
+	 * @param userUU
+	 * @param checkcode
+	 * @return
+	 */
+	public String checkForget(Long userUU, String checkcode);
+
+	/**
+	 * 忘记密码,根据验证码重设密码
+	 * @param type
+	 */
+	public void resetPwdByCheckcode(Long userUU, String newPwd, String checkcode);
 
 }

+ 82 - 1
src/main/java/com/uas/platform/b2b/service/impl/UserServiceImpl.java

@@ -12,12 +12,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import com.uas.platform.b2b.dao.UserDao;
 import com.uas.platform.b2b.model.User;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.SendMailService;
 import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.b2b.support.TokenService;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.Status;
@@ -26,11 +28,18 @@ import com.uas.platform.core.util.encry.Md5Utils;
 
 @Service
 public class UserServiceImpl implements UserService {
+	
 
 	@Autowired
 	private UserDao userDao;
 	@Autowired
 	private SendMailService sendMailService;
+	@Autowired
+	private TokenService tokenService;
+	
+	static final String TEL_REGEXP = "^((\\(\\d{3}\\))|(\\d{3}\\-))?(13|15|18)\\d{9}$";
+
+	static final String UU_REGEXP = "^\\d{4,}$";
 
 	@Override
 	public boolean isEmailUseable(String email) {
@@ -157,7 +166,7 @@ public class UserServiceImpl implements UserService {
 		model.put("dateTime", timeFormat.format(new Date()));
 		model.put("userTel", user.getUserTel());
 		model.put("rootpath", AgentUtils.getHost(request));
-		sendMailService.sendTemplateMail(user.getUserEmail(), "欢迎使用UAS管理平台", model, "velocity/newUser.vm");
+		sendMailService.sendTemplateMail(user.getUserEmail(), "欢迎使用UAS商务平台", model, "velocity/newUser.vm");
 		return user;
 	}
 
@@ -191,4 +200,76 @@ public class UserServiceImpl implements UserService {
 		return CollectionUtils.isEmpty(users) ? null : users.get(0);
 	}
 
+	@Override
+	public User findShieldUuserInfo(String userName) {
+		User user = null;
+		if (userName.contains("@")) { // 邮箱登录
+			user = findUserByUserEmail(userName);
+		} else if (userName.matches(TEL_REGEXP)) {// 手机号登录
+			user = findUserByUserTel(userName);
+		} else if (userName.matches(UU_REGEXP)) {
+			user = findUserByUserUU(Long.parseLong(userName));
+		}
+		if(user == null)
+			throw new IllegalOperatorException("未查找到您输入账号的用户信息");
+		user.setCurrentEnterprise();
+		if(user.getEnterprise() == null)
+			throw new IllegalOperatorException("您的账号已被管理员删除,无法操作");
+		return user;
+	}
+
+	@Override
+	public void sendForgetEmai(Long userUU, String type, HttpServletRequest request) {
+		User user = userDao.findOne(userUU);
+		user.setCurrentEnterprise();
+		String encodeString = tokenService.getEncodeToken("user", user.getUserUU());
+		// 发送邮件
+		Map<String, Object> model = new HashMap<String, Object>();
+		model.put("enName", user.getEnterprise().getEnName());
+		model.put("userName", user.getUserName());
+		model.put("uu", user.getUserUU());
+		model.put("checkcode", encodeString);
+		model.put("rootpath", AgentUtils.getHost(request));
+		if("admin".equals(type)) {//发送给管理员
+			User admin = userDao.findOne(user.getEnterprise().getEnAdminuu());
+			// 发送邮件
+			model.put("email", admin.getUserEmail());
+			sendMailService.sendTemplateMail(admin.getUserEmail(), "UAS商务平台找回密码", model, "velocity/forgetPwd.vm");
+		} else {//发送给自己
+			// 发送邮件
+			model.put("email", user.getUserEmail());
+			sendMailService.sendTemplateMail(user.getUserEmail(), "UAS商务平台找回密码", model, "velocity/forgetPwd.vm");
+		}
+	}
+
+	@Override
+	public String checkForget(Long userUU, String checkcode) {
+		String encodeString = null;
+		if(tokenService.isCertified("user", userUU, checkcode)) {
+			encodeString = tokenService.getEncodeToken("user", userUU);
+		} else {
+			throw new IllegalOperatorException("验证码验证失败");
+		}
+		return encodeString;
+	}
+
+	@Override
+	public void resetPwdByCheckcode(Long userUU, String newPwd, String checkcode) {
+		if(StringUtils.hasText(newPwd) && StringUtils.hasText(checkcode) && userUU != null) {
+			boolean result = tokenService.isCertified("user", userUU, checkcode);
+			if (result) {
+				User user = userDao.findOne(userUU);
+				if(user != null) {
+					user.setUserPwd(Md5Utils.encode(newPwd, userUU));
+					userDao.save(user);
+				}
+			} else {
+				throw new IllegalArgumentException();
+			}
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+	
+
 }