开发过程中有时候会遇到用户忘记密码需要邮箱验证的情况,当然,现在大多数是手机短信验证,但是思路应该基本上是差不多的,最近就遇到这样的问题,如何验证邮箱激活。发送的邮件代码如下:
String id = UUIDUtil.getId();
String URL="http://localhost:8080/store/user?md=updatePswUI&uid="+user.getUid()+"&id="+id;
String message = "点击链接重置密码:<a href="+URL+">"+URL+"</a>";
MailUtil.sendMail(user.getEmail(), message);
验证邮箱要求链接一次性有效,浏览器一次申请存放数据的域有好几种,这里我尝试的是放进cookies中来存储,但是,发现无论点击多少次激活连接都会跳转到重置密码页面,代码如下:
Cookie[] cookies = request.getCookies();
String id =request.getParameter("id");
if (cookies!=null) {
for (Cookie cookie : cookies) {
if (!id.equals(cookie.getValue())) {
Cookie cookie2=new Cookie("id", id);
response.addCookie(cookie2);
return "user/updatePswUI";
}
}
}
request.setAttribute("msg", "该链接已被使用,请重新发送邮件!");
return "info";
问题的症结在于,for循环遍历只遍历了一个数据就return了。
后来的解决方案是这样的
Cookie[] cookies = request.getCookies();
String id =request.getParameter("id");
if (cookies!=null) {
for (Cookie cookie : cookies) {
if (id.equals(cookie.getValue())) {
request.setAttribute("msg", "该链接已被使用,请重新发送邮件!");
return "info";
}
}
}
Cookie cookie2=new Cookie("id", id);
response.addCookie(cookie2);
return "user/updatePswUI";
也就是在cookies域中存储数据遍历做判断的时候,应该是先去判断特例,这样才不会出现只遍历一次就return的情况