前言

随着IT行业的发展,越来越多的人投入到计算机行业,也越来越多的草根站长尝试创建自己的网站,一是检验自己的编码水平,二是经营好一个网站可以给我们带来一定的收入。一个网站,一般前期都有会员的登录注册功能,随着用户上来,可能就会开始集成第三方登录登录,如QQ,微信,微博扫码登录等。本文档主要介绍基于邮箱验证码来实现合理的登录注册功能,保证注册用户的合法性。

创建工程

项目主要采用springboot来快速构建工程,构建方式此处省略,在构建项目过程中我们主要引用如下依赖即可,后期根据需求再逐个添加其他依赖:




spring boot dubbo 消费者注册 spring boot登录注册功能_spring 测试demo乱码


集成静态界面

快速集成静态界面,将资料里面的boot-login-layui-demo文件夹下的html文件集成到项目中


spring boot dubbo 消费者注册 spring boot登录注册功能_git_02


新建FrontController.java控制类

package com.democxy.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class FrontController {    @GetMapping("/login")    public String login(){        return "login";    }    @GetMapping("/regit")    public String regit(){        return "reg";    }    @GetMapping("/index")    public String index(){        return "index";    }}

启动项目,浏览器输入http://localhost:8080/login 访问登录界面


spring boot dubbo 消费者注册 spring boot登录注册功能_spring 测试demo乱码_03


到此,静态界面初步引入成功:

抽离出公共界面

在前一节中 我们已经初步引入了我们的静态界面,并可正常输入请求地址请求到相关界面,本节主要是对静态界面做一些改进,如抽离头部部分,改善代码中引入路径等信息

抽离公共页面:

我们可以发现无论是首页 登录页还是注册页,都有一段重复的代码,也就是我们的头部和尾部

头部代码:


                  源码分享                    案例                   贤心            VIP3      

spring boot dubbo 消费者注册 spring boot登录注册功能_git_04

        基本设置      我的消息      我的主页            退出            


尾部代码:


DEMO程序园 2020 © democxy.com 出品


   源码分享    资料分享    博客分享  


我们新建一个common.html界面:将以上两部分公共代码块保存起来,并使用thymeleaf标签th:fragment声明这是一个代码块:


                                    源码分享                                        案例                             贤心                                        VIP3                    

spring boot dubbo 消费者注册 spring boot登录注册功能_git_04

                                基本设置                    我的消息                    我的主页                                        退出                                        


DEMO程序园 2020 © democxy.com 出品


       源码分享        资料分享        博客分享    


引入代码块:

抽离出公共代码块 接下来我们就可以在使用它的地方使用标签:th:replace来引入

如:

修改头部文件

在上一节已经把公共头部抽离出来了,本节主要修改头部代码,使其实现未登录时出现登录注册按钮,并设置跳转对应链接:

首先,为了便于开发,我们先要关闭thymeleaf的模板缓存,在配置文件中加入:

spring:  thymeleaf:    cache: false

修改头部代码(修改后代码如下):


                                    源码分享                                        案例                             贤心                    

spring boot dubbo 消费者注册 spring boot登录注册功能_git_04

                                                       安全退出                        


集成mybaits

引入依赖:

org.mybatis.spring.boot    mybatis-spring-boot-starter    2.1.1    mysql    mysql-connector-java

新增mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-config.dtd">

yaml文件新增数据库配置信息:

mybatis:  config-location: classpath:mybatis-config.xml  mapper-locations: classpath:mapper/**/*.xmlspring:  datasource:    username: root    password: 123456    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/email-demo?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8

完善后台代码:

新建实体类com.democxy.entity.Member

package com.democxy.entity;import java.util.Date;public class Member {    // 会员ID    private String id;    // 会员昵称    private String username;    // 会员密码    private String password;    // 会员注册时间    private Date regitTime;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public Date getRegitTime() {        return regitTime;    }    public void setRegitTime(Date regitTime) {        this.regitTime = regitTime;    }}

新建mapper接口类 com.democxy.mapper.MemberMapper

package com.democxy.mapper;import com.democxy.entity.Member;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface MemberMapper {    int insert(Member member);    Member login(Member member);}

新建service接口类 com.democxy.service.MemberService

pacage com.democxy.service;import com.democxy.entity.Member;import com.democxy.mapper.MemberMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class MemberService {    @Autowired    MemberMapper memberMapper;    public int insert(Member member){        return memberMapper.insert(member);    }    public Member login(Member member){        return memberMapper.login(member);    }}

新建mapper配置文件:mapper/MemberMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">            a.id AS "id",        a.username AS "username",        a.password AS "password",        a.regit_time AS "regitTime"                        SELECT                FROM member a                WHERE a.username = #{username} and a.password = #{password}                INSERT INTO member(        username,        password,        regit_time        ) VALUES (        #{username},        #{password},        #{regitTime}        )

新增测试代码:com.democxy.EmailDemoApplicationTests

package com.democxy;import com.democxy.entity.Member;import com.democxy.service.MemberService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import javax.xml.ws.Service;import java.util.Date;@SpringBootTestclass EmailDemoApplicationTests {    @Autowired    MemberService memberService;    @Test    void contextLoads() {        Member member = new Member();        member.setUsername("admin");        member.setPassword("123456");        member.setRegitTime(new Date());        memberService.insert(member);    }}

启动测试后我们会发现数据库成功插入了一条记录,至此后台代码基本完善。

集成email实现邮件发送功能

引入依赖:

org.springframework.boot    spring-boot-starter-mail

yaml文件新增邮箱配置信息:

spring:    mail:        host: smtp.qq.com        port: 465        username: 2534754276@qq.com        password: xxxx #授权码        default-encoding: utf-8        properties:          mail:            smtp:              ssl:                enable: true #一定要开启ssl,不然会503 验证失败的

新增邮件发送服务类com.democxy.service.EmailService

package com.democxy.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.springframework.stereotype.Service;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;@Servicepublic class EmailService {    @Autowired    private JavaMailSender javaMailSender;    @Value("${spring.mail.username}")    private String sender;    public void sendMail(String to, String subject, String content) {        SimpleMailMessage mailMessage=new SimpleMailMessage();        mailMessage.setFrom(sender);        mailMessage.setTo(to);        mailMessage.setSubject(subject);        mailMessage.setText(content);        try {            javaMailSender.send(mailMessage);        }catch (Exception e){            e.printStackTrace();            System.out.println("发送简单邮件失败");        }    }    public void sendHtmlMail(String to,String subject, String content) {        MimeMessage message = javaMailSender.createMimeMessage();        try {            //true表示需要创建一个multipart message            MimeMessageHelper helper = new MimeMessageHelper(message, true);            helper.setFrom(sender);            helper.setTo(to);//邮件接收者            helper.setSubject(subject);//邮件主题            helper.setText(content, true);//邮件内容            javaMailSender.send(message);        } catch (MessagingException e) {        }    }}

测试类新增测试方法:

package com.democxy;import com.democxy.entity.Member;import com.democxy.service.EmailService;import com.democxy.service.MemberService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import javax.xml.ws.Service;import java.util.Date;@SpringBootTestclass EmailDemoApplicationTests {    @Autowired    MemberService memberService;    @Autowired    EmailService emailService;    @Test    void contextLoads() {        Member member = new Member();        member.setUsername("admin");        member.setPassword("123456");        member.setRegitTime(new Date());        memberService.insert(member);    }    @Test    void sendEmail() {        emailService.sendHtmlMail("2534754276@qq.com","网站注册","验证码:8989");    }}