SpringBoot實(shí)現(xiàn)QQ郵箱注冊(cè)和登錄
閱讀本文大概需要 6.5?分鐘。
來(lái)自:blog.csdn.net/qq_42524288
1、登錄注冊(cè)思路
這是一個(gè)使用spring boot做的一個(gè)qq郵箱注冊(cè)和登錄的項(xiàng)目。
沒(méi)寫(xiě)前端頁(yè)面,使用postman測(cè)試。有截圖詳細(xì)。
1.1、思路
1.2、整個(gè)項(xiàng)目結(jié)構(gòu)圖

2、準(zhǔn)備
2.1、開(kāi)啟郵箱POP3/SMTP服務(wù)

一定要好好保存,在appliction.properties配置中會(huì)用到。
2.2、創(chuàng)建一個(gè)spring boot項(xiàng)目的時(shí)候,一直確認(rèn),jdk選擇8。
標(biāo)簽的全部依賴(lài)<dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starterartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-mailartifactId>dependency><dependency><groupId>org.mybatis.spring.bootgroupId><artifactId>mybatis-spring-boot-starterartifactId><version>1.3.2version>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>8.0.19version>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-jdbcartifactId>dependency>????dependencies>
2.3、application.properties配置文件
spring.mail.host = smtp.qq.comspring.mail.username = [email protected]spring.mail.password = xxxxxxspring.mail.properties.mail.smtp.ssl.enable=truespring.mail.default-encoding=UTF-8spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/email?useSSL=true&characterEncoding=utf-8&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=rootmybatis.mapper-locations=classpath:mapper/*.xml
2.4、創(chuàng)建數(shù)據(jù)庫(kù)

CREATE?DATABASE?email;
CREATE TABLE `user` (`id` int(20) NOT NULL AUTO_INCREMENT,`username` varchar(255) NOT NULL,`password` varchar(255) NOT NULL,`email` varchar(255) NOT NULL,PRIMARY KEY (`id`))?ENGINE=InnoDB?AUTO_INCREMENT=6?DEFAULT?CHARSET=utf8;
3、全部代碼類(lèi)
package com.lu.youxiang.controller;import com.lu.youxiang.service.MailService;import com.lu.youxiang.vo.UserVo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpSession;@Controllerpublic class UserController {@Autowiredprivate MailService mailService;@PostMapping("/sendEmail")@ResponseBodypublic String sendEmail(String email, HttpSession httpSession){mailService.sendMimeMail(email, httpSession);return "sucess";}@PostMapping("/regist")@ResponseBodypublic String regist(UserVo userVo, HttpSession session){mailService.registered(userVo,session);return "sucess";}@PostMapping("/login")@ResponseBodypublic String login(String email, String password){mailService.loginIn(email,password);return "sucess";}}
package com.lu.youxiang.mapper;import com.lu.youxiang.pojo.User;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;@Mapper@Repositorypublic interface UserMapper {/*** 注冊(cè),插入數(shù)據(jù)* @param user*/void insertUser(User user);/*** 根據(jù)郵箱查詢(xún)* @param email* @return*/User queryByEmail(String email);}
package com.lu.youxiang.pojo;public class User {private String username;private String password;private String email;//get和set方法省略了,自己生成一下}
package com.lu.youxiang.service;import com.lu.youxiang.mapper.UserMapper;import com.lu.youxiang.pojo.User;import com.lu.youxiang.vo.UserVo;import com.lu.youxiang.vo.UserVoToUser;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.stereotype.Service;import javax.servlet.http.HttpSession;import java.util.Random;public class MailService {private JavaMailSender mailSender;//一定要用@Autowiredprivate UserMapper userMapper;//注入U(xiǎn)serMapper,交給bena//application.properties中已配置的值private String from;/*** 給前端輸入的郵箱,發(fā)送驗(yàn)證碼* @param email* @param session* @return*/public boolean sendMimeMail( String email, HttpSession session) {try {SimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setSubject("驗(yàn)證碼郵件");//主題//生成隨機(jī)數(shù)String code = randomCode();//將隨機(jī)數(shù)放置到session中session.setAttribute("email",email);session.setAttribute("code",code);mailMessage.setText("您收到的驗(yàn)證碼是:"+code);//內(nèi)容mailMessage.setTo(email);//發(fā)給誰(shuí)mailMessage.setFrom(from);//你自己的郵箱mailSender.send(mailMessage);//發(fā)送return true;}catch (Exception e){e.printStackTrace();return false;}}/*** 隨機(jī)生成6位數(shù)的驗(yàn)證碼* @return String code*/public String randomCode(){StringBuilder str = new StringBuilder();Random random = new Random();for (int i = 0; i < 6; i++) {str.append(random.nextInt(10));}return str.toString();}/*** 檢驗(yàn)驗(yàn)證碼是否一致* @param userVo* @param session* @return*/public boolean registered(UserVo userVo, HttpSession session){//獲取session中的驗(yàn)證信息String email = (String) session.getAttribute("email");String code = (String) session.getAttribute("code");//獲取表單中的提交的驗(yàn)證信息String voCode = userVo.getCode();//如果email數(shù)據(jù)為空,或者不一致,注冊(cè)失敗if (email == null || email.isEmpty()){//return "error,請(qǐng)重新注冊(cè)";return false;}else if (!code.equals(voCode)){//return "error,請(qǐng)重新注冊(cè)";return false;}//保存數(shù)據(jù)User user = UserVoToUser.toUser(userVo);//將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)userMapper.insertUser(user);//跳轉(zhuǎn)成功頁(yè)面return true;}/*** 通過(guò)輸入email查詢(xún)password,然后比較兩個(gè)password,如果一樣,登錄成功* @param email* @param password* @return*/public boolean loginIn(String email, String password){User user = userMapper.queryByEmail(email);if(!user.getPassword().equals(password)){return false;}System.out.println("登錄成功:數(shù)據(jù)庫(kù)密碼是:"+user.getPassword());return true;}}
package com.lu.youxiang.vo;public class UserVo {private String username;private String password;private String email;// 驗(yàn)證碼private String code;//省略了get和set方法,自己生成一下?}
package com.lu.youxiang.vo;import com.lu.youxiang.pojo.User;public class UserVoToUser {/*** 將表單中的對(duì)象轉(zhuǎn)化為數(shù)據(jù)庫(kù)中存儲(chǔ)的用戶(hù)對(duì)象(剔除表單中的code)* @param userVo* @return*/public static User toUser(UserVo userVo) {//創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)象User user = new User();//傳值user.setUsername(userVo.getUsername());user.setPassword(userVo.getPassword());user.setEmail(userVo.getEmail());// 返回包裝后的對(duì)象return user;}}
在resources包下創(chuàng)建mapper包,用來(lái)放xml,然后再這個(gè)包中創(chuàng)建UserMapper.xml,內(nèi)容如下。
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.lu.youxiang.mapper.UserMapper"><insert id="insertUser" parameterType="com.lu.youxiang.pojo.User">insert into user (username,password,email)values (#{username},#{password},#{email})insert><select id="queryByEmail" resultType="com.lu.youxiang.pojo.User">select *from userwhere email = #{email}select>mapper>
4、使用postman測(cè)試
打開(kāi)后,點(diǎn)擊左上角的file,再點(diǎn)擊New Tab,就會(huì)出來(lái)一個(gè)頁(yè)面。
(或者使用
Ctrl+T快捷鍵)4.1、測(cè)試發(fā)送郵件
http://localhost:8080/[email protected]如下圖

4.2、測(cè)試注冊(cè)
http://localhost:8080/regist
4.3、測(cè)試登錄
http://localhost:8080/[email protected]&password=12345
推薦閱讀:
阿里又搞黃了一個(gè)APP……萬(wàn)千宅男的夢(mèng)破碎了!
微信掃描二維碼,關(guān)注我的公眾號(hào)
朕已閱?
評(píng)論
圖片
表情

