注意:网络的邮箱 --> 存在授权的问题

邮箱验证:实际上是在注册账号的同时生成了一个随机码,在发送邮件的时候,根据随机码去更改账号的状态


第一步:安装邮箱服务器和客户端

第二步:项目导入邮件jar包      (点击下载邮件所需资源   密码:mben)

第三步:项目中使用代码发送邮件

我的数据库user表:

项目中发送邮件的代码体现在service中:

public interface IUserService {User queryOne(User user)throws Exception;void update(User user)throws Exception;void addUser(User user)throws Exception;
}
@Service
public class UserServiceImpl implements IUserService {@Autowiredprivate UserDaoImpl dao;@Overridepublic User queryOne(User user) throws Exception {return dao.queryOne(user);}@Overridepublic void update(User user) throws Exception {System.out.println(user.getUuid());dao.update(user);}@Overridepublic void addUser(User user) throws Exception {user.setUuid(UUID.randomUUID().toString());//生成一个uuiddao.addUser(user);//发送邮件Properties prop = new Properties();prop.setProperty("mail.host", "192.168.43.66");//192.168.43.66 --> 本地ip地址prop.setProperty("mail.transport.protocol", "smtp");prop.setProperty("mail.smtp.auth", "true");// 使用JavaMail发送邮件的5个步骤// 1、创建sessionSession session = Session.getInstance(prop);// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态session.setDebug(true);// 2、通过session得到transport对象Transport ts = session.getTransport();// 3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。ts.connect("192.168.43.66", "a", "a");// 4、创建邮件Message message = createSimpleMail(session,user.getUuid());// 5、发送邮件ts.sendMessage(message, message.getAllRecipients());ts.close();}public  MimeMessage createSimpleMail(Session session,String uuid) throws Exception {// 创建邮件对象MimeMessage message = new MimeMessage(session);// 指明邮件的发件人message.setFrom(new InternetAddress("a@zhengqing.com"));// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发message.setRecipient(Message.RecipientType.TO, new InternetAddress("b@zhengqing.com"));// 邮件的标题message.setSubject("只包含文本的简单邮件");// 邮件的文本内容message.setContent("你好:<a href='http://localhost:8080/zq/update.do?uuid="+uuid+"'>验证用户注册</a>", "text/html;charset=UTF-8");// 返回创建好的邮件对象return message;}}

dao层实现数据的增删改查:

public interface IUserDao {User queryOne(User user)throws Exception;void update(User user)throws Exception;void addUser(User user)throws Exception;
}
@Repository
public class UserDaoImpl implements IUserDao {@Autowiredprivate JdbcTemplate jt;@Overridepublic User queryOne(User user) {User u = null;try {String sql = "select * from user where isenabled=true and username=?";//如果不捕获异常 --> ResultSet is emptyu = (User) jt.queryForObject(sql, new BeanPropertyRowMapper(User.class), user.getUsername());} catch (Exception e) {e.printStackTrace();return null;}return u;}@Overridepublic void update(User user) throws Exception {System.out.println("updateUser======");String sql="update user set isenabled=true,uuid=null where uuid=?";jt.update(sql,user.getUuid());System.out.println("updateUser==后======");}@Overridepublic void addUser(User user) throws Exception {System.out.println("addUser======");String sql="insert into user(username,password,uuid) values(?,?,?)";jt.update(sql,user.getUsername(),user.getPassword(),user.getUuid());System.out.println(sql+"-======-");}}

controller控制层做页面跳转逻辑处理:

@Controller
public class LoginController {@Autowiredprivate UserServiceImpl service;@RequestMapping("/login.do")public String login(User user,HttpSession session) throws Exception {User u = service.queryOne(user);if (u == null) {return "redirect:/login.html";} else {if (user==null || !user.getPassword().equals(u.getPassword())) {return "redirect:/login.html";}}session.setAttribute("user", u);return "/index.html";}@RequestMapping("/signup.do")public String signup(User user) throws Exception{/*** 注册用户* 1.存储数据* 2.发送邮件*/System.out.println("signup.do前====");service.addUser(user);System.out.println("signup.do新增后====");return "redirect:/login.html";}//验证方法  127.0.0.1/zq/update?uuid=值@RequestMapping("/update.do")public String update(User user) throws Exception{/*** 注册用户* 1.存储数据* 2.发送邮件*/service.update(user);return "redirect:/login.html";}}

登录注册页面-->写的很简单,主要看邮件验证的功能实现

login.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body align="center"><h1>登录页面</h1><form action="/zq/login.do" method="post">用户名:<input type="text" name="username" placeholder="账号/手机号/邮箱"><br /> 密码:<input  type="text" name="password" placeholder="密码"><br /> <button type="submit">登&nbsp;&nbsp;录</button></form>
</body>
</html>

register.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body align="center"><h1>注册页面</h1><form action="/zq/signup.do" method="post">用户名:<input type="text" name="username" placeholder="用户名"><br /> 密码:<input   type="text" name="password" placeholder="密码"><br /> <input type="submit"><br /></form>
</body>
</html>

具体代码看分享的项目资源吧~       点击下载资源    密码: v5yw


这里简单说下我的邮箱设置之类的吧  

邮箱服务端:   -->我新建的是a和b两个账号

邮箱客服端:

发送邮件

SpringMVC(8) 模拟邮件验证实现注册登录相关推荐

  1. 10分钟搞定Java带token验证的注册登录

    这是spring boot框架下的登录注册功能,并且带有token验证,可以用于生产环境的实例 原理太简单,直接上代码,让你知道什么叫拿来主义!! 1,java中项目介绍 2,resources 中的 ...

  2. springboot+springsecurity+阿里云短信服务验证实现注册登录

    使用springboot+security+Aliyun短信服务实现注册登录 为了实现个人博客部分的登录注册,我采用了阿里云短信服务发送验证码,后端比对验证码的方式完成注册,现在功能还不完全,以后这个 ...

  3. php注册登录遍写入 遍验证,自动注册登录验证机制的php代码

    在phpwind站点后台添加"广告管家"(CNZZ的一款广告投放的应用)的应用,整个"广告管家"通过iframe载入,载入的具体内容根据不同站点显示针对该站点的 ...

  4. Jsp+Servlet+MYSQL注册登录案例(界面难看,ε=(´ο`*)))唉)

    注册登录界面尤为常见,我的界面尤为难看,勉为其难的写吧,前端不熟就是这样... 这个案例运用到了: 1.Jsp动态页面--->动态页面 2.Servlet逻辑判断后台---->实现界面与数 ...

  5. SpringMVC 实现注册登录

    记录一下SpringMVC实现注册登录功能这个小程序. 一.新建动态Dynamic Web Project: 新建Dynamic Web Project,项目名为LoginSpringMVC 导入相应 ...

  6. spring mvc 模拟数据库实现注册 登录

    model层代码,用户 package com.entity; import java.io.Serializable;public class User implements Serializabl ...

  7. 使用Bmob云端服务器模拟简单的注册登录

    前一阶段看徐宜生写的Android群英传里面介绍的搭建云端服务器,那个时候自己不懂,加上有其他的学习,就没有深入,但是这两天找了资料研究了一下,读了官方文档,感觉挺不错的,服务端不用自己搭建了.(听说 ...

  8. JAVA之模拟注册登录幸运抽奖

    1.控制台程序开发. 2.变量和运算符. 3.数据类型与数组. 4.流程控制语句. 5.检测:模拟注册登录幸运抽奖全过程:主要功能 :注册.登录.幸运抽奖.  打开我们的记事本,写一段代码: impo ...

  9. 原生js验证简洁美观注册登录页面

    本文转载自: https://www.cnblogs.com/storm-chou/p/6189489.html 作者:storm-chou 转载请注明该声明. 序 一个以js验证表单的简洁的注册登录 ...

最新文章

  1. 你知道 URL 后面的这些 utm_xxx 参数都是干嘛的吗?
  2. jdk和tomcat配置
  3. [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
  4. python 自动化办公 uibot_【插件开发】使用 Python 扩展 UiBot 的功能
  5. 动态照片墙 python 实现_利用python生成照片墙的示例代码
  6. mysql读写分离 同步_MySQL数据库的同步配置+MySql读写分离
  7. 抖音“市长带你看湖北”首场直播:总成交额1793万元
  8. 【medium】220. Contains Duplicate III
  9. Hadoop笔记整理(三):Zookeeper
  10. JavaScript人脸检测的实现方法
  11. [转]使用Hyper-V BPA(Best Practices Analyzer-最佳化分析工具)
  12. linux 小度wifi,树莓派2小度wifi(MT7601U)驱动
  13. 实验06 分析IP报文结构实验报告
  14. 教你ogg怎么转mp3格式
  15. 【DPD数字预失真】射频功放的Volterra级数数字预失真系统开发
  16. 计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训
  17. 用户正确使用趋势跟随的交易系统的方法
  18. 虚拟化技术——VLAN策略
  19. Qt5嵌入式桌面输入法实现最新指南与DBUS调试工具
  20. 使用nginx模拟反向代理

热门文章

  1. android 软件盘未弹出如何获取高度,Android 软键盘的那些坑,一招搞定!
  2. 心动页面html,心动模式播放页.html
  3. 一篇简短的文本摘要综述
  4. 阿里程序员相亲被嫌弃,只因穿了双特步鞋!
  5. 随机输入六个大小无序的整数,并从小到大排序
  6. vue服务端渲染 MySQL_vue服务端渲染
  7. ASP.NET MVC 原理
  8. 基于nodejs爬虫
  9. 从入门到精通Uboot(1.Uboot概括)
  10. 任意多边形三维屋顶自动生成算法