文章目录
1、激活功能—界面展示
2、Uuid介绍
(1)什么是Uuid
- UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的重要部分。
- 简而言之
全球唯一的,不会重复的 固定长度的随机字符串
f8d59d0168af4602a9b754663e2cd9ef
67f95f0b436947619ac14a9f2a7ce6bf
(2)Uuid的组成
按UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
UUID的应用?
(3)Uuid的使用
- UuidUtil.java(src\main\java\util)
/**
* 产生UUID随机字符串工具类
*/
public final class UuidUtil {
private UuidUtil(){
}
public static String getUuid(){
return UUID.randomUUID().toString().replace("-","");
}
}
- 测试类
UuidUtilTest.java(src\test\java\util)
public class UuidUtilTest {
@Test
public void getUuid() {
for (int i = 0; i < 10; i++) {
String code = UuidUtil.getUuid();
System.out.println(code);
}
}
}
3、后台代码
(1)设置状态和激活码
- UserService.java(src\mian\java\service)
user.setStatus('N');//未激活
String activeCode = UuidUtil.getUuid();
user.setCode(activeCode);//激活
userDao.save(user);
MySessionUtils2.commitAndClose();
(2)测试激活
- TestUserService.java(src\test\java\service)
@Test
public void test04() {
UserService userService = new UserService();
//根据 code -> status 改为Y
int code = userService.active("bb26f0d05ea745c5986bc18ff7b4cef9");
System.out.println(code);
}
}
(3)实现激活
- UserService.java(src\main\java\service)
//激活邮箱
public int active(String activeCode) {
UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
int code = userDao.updateStatus(activeCode); //1 表示成功
MySessionUtils2.commitAndClose();
return code;
}
- UserDao.java(src\main\java\dao)
//update tab_user set status ='Y' where code = 'bb26f0d05ea745c5986bc18ff7b4cef9';
int updateStatus(String activeCode);
- UserDao.xml(src\main\resources)
<update id="updateStatus" parameterType="string" >
update tab_user set status ='Y' where code = #{
code};
</update>
- 测试dao方法
TestUserService(src\test\java\service)
@Test
public void test04() {
UserService userService = new UserService();
//根据 code -> status 改为Y
int code = userService.active("bb26f0d05ea745c5986bc18ff7b4cef9");
System.out.println(code);
}
(4)完善注册功能
- UserService.java(src\main\java\service)
public int register(User user) {
UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
//判断 用户的账号是否存在
User user2 = userDao.findByUserName(user.getUsername());
//不存在,调用保存 返回 1
if(user2 == null){
user.setStatus('N');//未激活
String activeCode = UuidUtil.getUuid();
user.setCode(activeCode);//激活
userDao.save(user);
MySessionUtils2.commitAndClose();
//参1 收件人
//参2 内容
//参3 标题
MailUtils.sendMail(user.getEmail(),"<a href='http://localhost:8080/lvyou_war_exploded/activeServlet?activeCode="+activeCode+"'>点击激活途牛旅游账户</a>","激活账户");
return 1;
}else{
//存在,返回-1
return -1;
}
}
//激活邮箱
public int active(String activeCode) {
UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
int code = userDao.updateStatus(activeCode); //1 表示成功
MySessionUtils2.commitAndClose();
return code;
}
4、邮箱激活方式
- 打开邮箱–>设置–>账户
- 找到POP3/IMAP…–>将前两项激活–>通过手机会收到授权码–>复制授权码
5、前台代码
(1) ActiveServlet.java
(src\main\java\web\servlet)
@WebServlet("/activeServlet")
public class ActiveServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取参数 activeCode //lvyou/activeServlet?activeCode=bb26f0d05ea745c5986bc18ff7b4cef9
String activeCode = request.getParameter("activeCode");
//处理参数
UserService userService = new UserService();
int code = userService.active(activeCode);
System.out.println(activeCode);
//响应给浏览器
String msg = "";
if(code==1){
msg="激活成功可以使用";
}else{
msg="激活失败";
}
request.setAttribute("msg",msg);
request.getRequestDispatcher("message.jsp").forward(request,response);
}
}
(2)message.jsp
(src\main\webapps)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${
msg}您已激活,请返回<a href="login.jsp">登录</a>
</body>
</html>
(3)MailUtils.java
- 将刚刚复制的授权码写在下方
(src\main\java\util)
/**
* 发邮件工具类
*/
public final class MailUtils {
private static final String USER = "[email protected]"; // 发件人称号,同邮箱地址
private static final String PASSWORD = "aghemvlpcgpubjaa"; // 如果是qq邮箱可以使户端授权码,或者登录密码
/**
*
* @param to 收件人邮箱
* @param text 邮件正文
* @param title 标题
*/
/* 发送验证信息的邮件 */
public static boolean sendMail(String to, String text, String title){
try {
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
// 发件人的账号
props.put("mail.user", USER);
//发件人的密码
props.put("mail.password", PASSWORD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
// 设置收件人
InternetAddress toAddress = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO, toAddress);
// 设置邮件标题
message.setSubject(title);
// 设置邮件的内容体
message.setContent(text, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
}catch (Exception e){
e.printStackTrace();
}
return false;
}
}
(4)MailUtilsTest .java
(src\test\java\util)
public class MailUtilsTest {
@Test
public void sendMail() {
//参1 收件人
//参2 内容
//参3 标题
MailUtils.sendMail("[email protected]","<a href='http://localhost:8080/lvyou_war_exploded/activeServlet?activeCode=f43812f68c794732943ffe678e9a4685'>点击激活途牛旅游账户</a>","激活账户");
}
}