发表于: 2018-01-28 22:29:01
1 609
今天完成的事情:
1.完成有邮件激活功能的注册系统。
用户在注册页面填写邮箱地址信息,提交信息以后会收到激活确认邮件,点击链接就可以激活账号。
@RequestMapping(value = "/register",method = RequestMethod.POST)
public String registerpost(Student student) throws Throwable {
student.setPassWord(MD5.getMD5(student.getPassWord()));
Date day = new Date();
student.setCreateTime(day);
student.setUpdateTime(day);
//生成随机4位数的email_code
String randomCode = RandomNumAndChar.getRandom(5);
student.setEmailCode(randomCode);
logger.info("注册用户信息"+student);
studentMapper.insert(student);
//发送激活邮件给用户
SendEmail.send_common(student.getEmail(),student.getUserName(),randomCode);
return "login";
}
发送的邮件中的链接包括username,和email_code.
//邮件内容
TextContent content = new TextContent();
content.setContent_type(TextContent.ScContentType.html);
String url = "http://localhost:8080/login?userName="+userName+"&email_code="+addressCode;
//String url = "https://www.baidu.com";
content.setText("<html><p>感谢注册,点击下面链接完成激活</p><a href='"+ url +"'>"+ url +"</a></html>");
用户点击这个链接可以跳转到登陆页面,根据传入的参数确认信息,更改账号状态为激活。
//登陆
@RequestMapping(value = "/login",method = RequestMethod.GET)
public ModelAndView logget(String userName,String email_code) {
//按照用户名查询用户,并对比email_code是否相同。
Student student = studentMapper.selectByuserName(userName);
System.out.println("查出来的用户" + student);
//
ModelAndView mav = new ModelAndView();
if (student.getEmailCode().equals(email_code)) {
//如果ok,email_statues改为1,用户可以正常登陆。
student.setAcountStatus(1);
System.out.println("更改状态后的用户"+student);
studentMapper.updateByPrimaryKeySelective(student);
mav.addObject("message","激活成功!可以登陆");
}else{
System.out.println("emailcode验证失败");
//TODO 应该加一个失效时间。
mav.addObject("message","激活码已过期");
}
mav.setViewName("login");
return mav;
}
遇到的问题:
1.邮箱中的链接点击以后被限制,点击继续访问也不能跳转,暂时没找到解决办法只能复制链接到地址栏。
收获:
1.搞清了使用邮件确认用户并激活账号的流程。
2.学习了一个产生数字和字母组合字符串的方法:
public static String getRandom(int n){
String val = "";
Random random = new Random();
for (int i = 0; i < n; i++) {
//%取余,如果余数0,取"num"
String str = random.nextInt(2) % 2 == 0 ? "num" : "char";
//qualsIgnoreCase 忽略大小写
if ("char".equalsIgnoreCase(str)) { // 产生字母
//???????
int nextInt = random.nextInt(2) % 2 == 0 ? 65 : 97;
// System.out.println(nextInt + "!!!!"); 1,0,1,1,1,0,0
val += (char) (nextInt + random.nextInt(26));
} else if ("num".equalsIgnoreCase(str)) { // 产生数字
val += String.valueOf(random.nextInt(10));
}
}
return val;
}
明天的计划:
1.添加数据校验。
2.异常处理。
任务7开始时间:2018.1.27
预计完成时间:2018.2.5
禅道:http://task.ptteng.com/zentao/project-task.html
评论