SpringBoot实现⽹站注册,邮件激活码激活功能
上⼀篇⽂章已经讲到如何,趁热打铁,这篇⽂章实现如下功能。
很多⽹站注册功能都会给您注册的邮箱发送⼀封邮件,⾥⾯是⼀串连接,点击链接激活功能,今天咱们就实现这个功能。
原理:
在您注册的时候,User类中设置⼀个邮件码code,同时⽤户状态未激活。邮件码可以通过UUID实现,这样在注册的时候发送⼀封邮件,把这个邮件码以html的格式发送到指定邮箱,然后通过点击链接,把邮件码在提交到后台进⾏对⽐,如果邮件中的邮件码跟发送时设置的⼀样,就把⽤户状态改为激活,然后登陆即可。
第⼀步搭搭建开发环境,只需要通过springboot整合mybatis实现⽤户注册登录功能即可,然后在注册的时候调⽤邮件接⼝发送邮件就可以了
引⼊相关依赖,这⾥使⽤的是阿⾥巴巴druid数据库连接池
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--SpringBoot测试⽀持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--SpringBoot热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!--Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
上⾯引⼊了热部署依赖,不引⼈页是可以的。另外还有thymeleaf模板引擎,springboot默认⽀持此引擎
引⼊相关依赖之后,节下来根据项⽬结构创建对应的包,请参考上⽂中的结构图。在⽬录结构完善之后,下⾯开始配置相关属性
abled=true
start.additional-paths=src/main
## 数据库连接配置
pe=com.alibaba.druid.pool.DruidDataSource
spring.datasource.sql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username=“你的⽤户名”
spring.datasource.password=“你的密码”
#默认编码配置
ding.charset=UTF-8
ding.force=true
abled=true
## MyBatis相关配置
mybatis.mapper-locations=mapper/*.xml
spring.thymeleaf.prefix=classpath:/templates/
##邮箱服务器地址
##QQ smtp.qq
##sina smtp.sina
##aliyun smtp.aliyun
##163 smtp.163
spring.mail.host=smtp.qq
##邮箱⽤户名
spring.mail.username=1016767658@qq
##邮箱密码(注意:qq邮箱应该使⽤独⽴密码,去qq邮箱设置⾥⾯获取)
spring.mail.password=ivhkrccrallkbdcf
##编码格式
spring.mail.default-encoding=UTF-8
##发送邮件地址
spring.mail.from=1016767658@qq
注意:数据库配置全部改写成您⾃⼰的账号密码,数据库等信息。邮箱配置不明⽩的可以参考上⼀篇。以上都完成之后,接下来是完善实体类,另外数据库这⾥就不在提⽰了,只有⼀个user类,可以⾃⼰完善⼀下
public class User implements Serializable {
private Integer id;
private String username;
private String password;
private String useremail;
/**
* 状态:0代表未激活,1代表激活
*/
private Integer status;
/**
* 利⽤UUID⽣成⼀段数字,发动到⽤户邮箱,当⽤户点击链接时
* 在做⼀个校验如果⽤户传来的code跟我们发⽣的code⼀致,更改状态为“1”来激活⽤户
*/
private String  code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
this.username = username;
}
public String getPassword() {
return password;
}
public String getUseremail() {
return useremail;
}
public void setUseremail(String useremail) {
this.useremail = useremail;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCode() {
return code;
}
public void setCode(String code) {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
html实现用户注册登录代码
", username='" + username + '\'' +
", password='" + password + '\'' +
", useremail='" + useremail + '\'' +
", status=" + status +
", code='" + code + '\'' +
'}';
}
}
说明:
⽤户状态status:0代表未激活,1代表激活,注册的时候,默认是0,只有激活邮箱激活码可以更改为1
邮箱激活码code:利⽤UUID⽣成⼀段数字,发动到⽤户邮箱,当⽤户点击链接时,在做⼀个校验,如果⽤户传来的code跟我们发送的code⼀致,更改状态为“1”来激活⽤户
实体类完成之后下⾯开始完善dao以及对应的l⽂件
public interface UserDao {
/**
* ⽤户注册,注册的时候默认状态为0:未激活,并且调⽤邮件服务发送激活码到邮箱
* @param user
*/
void register(User user);
/**
* 点击邮箱中的激活码进⾏激活,根据激活码查询⽤户,之后再进⾏修改⽤户状态为1进⾏激活
* @param code
* @return
*/
User checkCode(String code);
/**
* 激活账户,修改⽤户状态为“1”进⾏激活
* @param user
*/
void updateUserStatus(User user);
/**
* 登录,根据⽤户状态为“1”来查询
* @param user
* @return
*/
User loginUser(User user);
}
代码中有详细说明,接下来是UserDao对应的映射⽂件l
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.jiangfeixiang.springbootemail.dao.UserDao" >
<!--注册⽤户-->
<insert id="register" parameterType="com.ity.User" >
insert into user ( username, password,useremail,status,code)
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{useremail,jdbcType=VARCHAR},      #{status,jdbcType=INTEGER},#{code,jdbcType=INTEGER})
</insert>
<!--根据激活码code查询⽤户-->
<select id="checkCode" parameterType="String" resultType="com.ity.User">
select * from user where code = #{code}
</select>
<!--激活账户,修改⽤户状态-->
<update id="updateUserStatus" parameterType="com.ity.User">
update user set status=1,code=null where id=#{id}
</update>
<!--登录,根据 status=1 进⾏查询-->
<select id="loginUser" resultType="com.ity.User" >
select * from user where username=#{username} and password=#{password} and status=1
</select>
</mapper>
dao以及对象映射⽂件完成之后,开始编写Service接⼝与实现类