最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringBoot實現(xiàn)QQ郵箱驗證碼注冊功能

 更新時間:2024年11月07日 11:14:58   作者:煙雨長虹,孤鶩齊飛  
QQ 郵箱是由騰訊公司推出的一款免費郵箱服務(wù),它提供了完整的郵件發(fā)送和接收功能,并且還支持多種郵件格式和附件類型,QQ 郵箱還具有強大的反垃圾郵件功能,可以有效地過濾垃圾郵件,并保護用戶隱私和安全,所以本文給大家介紹了基于SpringBoot實現(xiàn)QQ郵箱驗證碼注冊功能

開啟郵箱服務(wù)

(1)首先打開QQ郵箱,點擊設(shè)置并來到賬號頁面

(2)找到并開通以下的郵件協(xié)議服務(wù),而且服務(wù)開啟也較為簡單,需要我們發(fā)送一個短信到指定的號碼,開啟后平臺會提供一個授權(quán)碼,一定要記住這個授權(quán)碼,發(fā)郵件的時候需要這個。

導(dǎo)入項目依賴

發(fā)送郵件的核心依賴是 mail ,由于該項目還涉及其他依賴就全都導(dǎo)進來了。

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.16</version>
        </dependency>
    </dependencies>

配置 yml 文件

spring:
  application:
    name: demo
    # 配置數(shù)據(jù)庫
  datasource:
    url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&characterEncoding=utf8
    username: root
    password:
    driver-class-name: com.mysql.cj.jdbc.Driver
  mail:
    # smtp服務(wù)主機  qq郵箱則為smtp.qq.com; 163郵箱是smtp.163.com
    host: smtp.qq.com
    # 服務(wù)協(xié)議
    protocol: smtp
    # 編碼集
    default-encoding: UTF-8
    # 發(fā)送郵件的賬戶
    username: xxx@qq.com
    # 授權(quán)碼
    password: xxx
    # 發(fā)送人昵稱
    nickname: xxx
 
    test-connection: true
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

其中的 username 是你第一步中操作的郵箱賬號,nickname 是接收者收到郵件中顯示的發(fā)件人。

host 是根據(jù)服務(wù)主機區(qū)分,網(wǎng)易郵箱是 smtp.163.com, qq郵箱是 smtp.qq.com。其它的默認(rèn)即可。

創(chuàng)建數(shù)據(jù)庫文件

CREATE TABLE `user` (
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `mailbox` varchar(20) NOT NULL,
  `id` int(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8

Dao 層

@Mapper
public interface UserDaoImpl {
    @Select("select * from user.user where username = #{username} and password = #{password}")
    User queryUser(@Param("username") String username, @Param("password")  String password);
 
    @Select("select * from user.user where username = #{username}")
    User selectByUsername(String username);
 
    @Insert("insert into user.user(username,password,mailbox) values (#{username},#{password},#{mailbox})")
    void AddUser(@Param("username") String username, @Param("password") String password, @Param("mailbox") String mailbox);
}
@Repository
public class UserDao implements UserDaoImpl{
    @Autowired
    private UserDaoImpl userDaoImpl;
 
    @Override
    public User queryUser(String username, String password) {
        return userDaoImpl.queryUser(username,password);
    }
 
    @Override
    public User selectByUsername(String username){
        return userDaoImpl.selectByUsername(username);
    }
 
    @Override
    public void AddUser(String username, String password, String mailbox) {
        userDaoImpl.AddUser(username,password,mailbox);
    }
}

Service 層

public interface UserServiceImpl {
    User queryUser(String username, String password);
    User selectByUsername(String username);
    void AddUser(String username, String password, String mailbox);
}
@Service
public class UserService implements UserServiceImpl{
    @Autowired
    private UserDao userDao;
 
    @Override
    public User queryUser(String username, String password) {
        return userDao.queryUser(username, password);
    }
 
    @Override
    public User selectByUsername(String username) {
        return userDao.selectByUsername(username);
    }
 
    @Override
    public void AddUser(String username, String password, String mailbox) {
        userDao.AddUser(username, password, mailbox);
    }
}

Controller 層

登入

@RequestMapping("/User")
@RestController
public class UserController {
    @Autowired
    private UserService userService;
 
    // 判斷登入
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public Boolean login(String name, String password, HttpSession session){
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(password)){
            System.out.println(false);
            return false;
        }
        if (userService.selectByUsername(name) != null&&
                userService.queryUser(name,password)!= null){
            session.setAttribute("userName", name);
            System.out.println(true);
            return true;
        }
        System.out.println(false);
        return false;
    }
    // 獲取用戶名
    @RequestMapping("/getLoginUser")
    public String getLoginUser(HttpSession session){
        if(session.getAttribute("userName")!=null){
            return (String)session.getAttribute("userName");
        }
        return "";
    }
 
}

注冊

@RestController
@RequestMapping("/email")
public class EmailController {
    @Autowired
    private UserService userService;
    // 這個是 mail 依賴提供給的發(fā)送郵件的接口
    @Autowired
    private JavaMailSender mailSender;
    // 獲取發(fā)件人郵箱
    @Value("${spring.mail.username}")
    private String sender;
    // 獲取發(fā)件人昵稱
    @Value("${spring.mail.nickname}")
    private String nickname;
    // 獲取驗證碼
    @GetMapping("/code")
    public boolean getCode(@RequestParam("email")String email,HttpSession session){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(nickname + '<' + sender + '>');
        message.setTo(email);
        message.setSubject("歡迎訪問東方");
 
        // 使用 hutool-all 生成 6 位隨機數(shù)驗證碼
        String code = RandomUtil.randomNumbers(6);
        session.setAttribute("email", code);
        String content = "【驗證碼】您的驗證碼為:" + code + " 。 3分鐘內(nèi)有效,請勿泄露和轉(zhuǎn)發(fā)。如非本人操作,請忽略此短信。\n\n\n";
        message.setText(content);
        mailSender.send(message);
        return true;
    }
    // 注冊賬號
    @PostMapping("/SignIn")
    public boolean UserSignIn(@RequestParam("userName")String userName,
                              @RequestParam("password")String password,
                              @RequestParam("mailbox")String mailbox,
                              @RequestParam("Verification")String Verification,
                              HttpSession session){
        // 通過 session 獲取驗證碼
        String SignInEmail = (String)session.getAttribute("email");
        // 如果用戶名存在返回 false
        if(userService.selectByUsername(userName)!= null)return false;
        // 驗證碼為空返回 false
        if(SignInEmail == null) return false;
        // 驗證碼對得上才進行插入操作,并返回 true
        if(SignInEmail.equals(Verification)){
            userService.AddUser(userName,password,mailbox);
            return true;
        }
        return false;
    }

前端

login.html

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登入</title>
    <link rel="stylesheet" href="css/bootstrap.min.css" rel="external nofollow"  rel="external nofollow" >
    <link rel="stylesheet" href="css/login.css" rel="external nofollow"  rel="external nofollow" >
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>
 
<body>
<div class="container-login">
    <div class="container-pic">
        <img src="pic/computer.png" width="350px">
    </div>
    <div class="login-dialog">
        <h3>登陸</h3>
        <div class="row">
            <span>用戶名</span>
            <input type="text" name="userName" id="userName" class="form-control">
        </div>
        <div class="row">
            <span>密碼</span>
            <input type="password" name="password" id="password" class="form-control">
        </div>
        <div class="row">
            <button type="button" class="btn btn-info btn-lg" onclick="login()">登錄</button>
        </div>
        <div class="row">
            <button type="button" class="btn btn-info btn-lg" onclick="Signin()">注冊</button>
        </div>
    </div>
</div>
<script src="js/jquery.min.js"></script>
<script>
    function login() {
        $.ajax({
            type: "post",
            url: "/User/login",
            data: {
                name: $("#userName").val(),
                password: $("#password").val()
            },
            success: function(result){
                if(result){
                    //登錄成功
                    location.href = "index.html";
                }else{
                    alert("賬號或密碼錯誤");
                }
            }
        });
    }
</script>
 
<script>
    function Signin(){
        window.location.href="Signin.html" rel="external nofollow" ;
    }
</script>
 
</body>
 
</html>

Signin.html

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>注冊</title>
    <link rel="stylesheet" href="css/bootstrap.min.css" rel="external nofollow"  rel="external nofollow" >
    <link rel="stylesheet" href="css/login.css" rel="external nofollow"  rel="external nofollow" >
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>
 
<body>
<div class="container-login">
    <div class="container-pic">
        <img src="pic/computer.png" width="350px">
    </div>
    <div class="login-dialog">
        <h3>注冊</h3>
        <div class="row">
            <span>用戶名</span>
            <input type="text" name="userName" id="userName" class="form-control">
        </div>
 
        <div class="row">
            <span>密碼</span>
            <input type="password" name="password" id="password" class="form-control">
        </div>
 
        <div class="row">
            <span>郵箱</span>
            <input type="mailbox" name="mailbox" id="mailbox" class="form-control">
        </div>
 
        <input type="button" value="發(fā)送驗證碼" id="email" onclick="jump()">
 
        <div class="row">
            <span>驗證碼</span>
            <input type="Verification" name="Verification" id="Verification" class="form-control">
        </div>
        <div class="row">
            <button type="button" class="btn btn-info btn-lg" onclick="SignIn()">注冊</button>
        </div>
    </div>
</div>
 
<script src="js/jquery.min.js"></script>
 
<script>
        function SignIn() {
            $.ajax({
                type: "post",
                url: "/email/SignIn",
                data: {
                    userName: $("#userName").val(),
                    password: $("#password").val(),
                    mailbox: $("#mailbox").val(),
                    Verification: $("#Verification").val(),
                },
                success: function(result){
                    if(result){
                        alert("注冊成功");
                        location.href = "login.html";
                    }else{
                        alert("注冊失敗");
                    }
                }
            });
            }
</script>
 
 
<script>
    function jump() {
        $.ajax({
            type: "get",
            url: "/email/code",
            data: {
                email: $("#mailbox").val()
            },
            success: function (result) {
                if (result) alert("驗證碼發(fā)送成功");
            }
        });
    }
</script>
 
</body>
 
</html>

到此這篇關(guān)于基于SpringBoot實現(xiàn)QQ郵箱驗證碼注冊功能的文章就介紹到這了,更多相關(guān)SpringBoot QQ郵箱驗證碼注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟

    Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟

    在現(xiàn)代微服務(wù)開發(fā)中,接口文檔的質(zhì)量直接影響了前后端協(xié)作效率,Swagger 作為一個主流的接口文檔工具,雖然功能強大,但其默認(rèn)界面和部分功能在實際使用中略顯不足,而 Knife4j 的出現(xiàn)為我們提供了一種增強的選擇,本篇文章將詳細介紹如何在項目中集成和使用 Knife4j
    2024-12-12
  • Java存儲過程調(diào)用@NamedStoredProcedureQuery示例詳解

    Java存儲過程調(diào)用@NamedStoredProcedureQuery示例詳解

    本文探討了@NamedStoredProcedureQuery的基礎(chǔ)知識、參數(shù)配置與映射、結(jié)果集處理、執(zhí)行方法、批量定義與組織、異常和事務(wù)處理以及最佳實踐與性能優(yōu)化等方面,感興趣的朋友一起看看吧
    2025-05-05
  • Java的Hibernate框架中的基本映射用法講解

    Java的Hibernate框架中的基本映射用法講解

    映射是Hibernate框架操作數(shù)據(jù)庫數(shù)據(jù)的重要特性之一,這里我們來看一下Java的Hibernate框架中的基本映射用法講解,包括最基本的單向一對一與多對一映射關(guān)系等:
    2016-07-07
  • SpringMVC Mock測試實現(xiàn)原理及實現(xiàn)過程詳解

    SpringMVC Mock測試實現(xiàn)原理及實現(xiàn)過程詳解

    這篇文章主要介紹了SpringMVC Mock測試實現(xiàn)原理及實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • eclipse 安裝lombok插件

    eclipse 安裝lombok插件

    這篇文章主要介紹了eclipse 安裝lombok插件的詳細步驟,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • jar更新jar包內(nèi)的class以及修改class實現(xiàn)方式

    jar更新jar包內(nèi)的class以及修改class實現(xiàn)方式

    文章主要介紹了使用jar命令操作JAR包的方法,包括解壓、更新JAR包內(nèi)的文件,以及直接修改JAR包內(nèi)的Class文件等內(nèi)容
    2026-04-04
  • Java真題實練掌握哈希表的使用

    Java真題實練掌握哈希表的使用

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點復(fù)雜,我想我舉個例子你就會明白了,最典型的的例子就是字典
    2022-07-07
  • spring boot Rabbit高級教程(最新推薦)

    spring boot Rabbit高級教程(最新推薦)

    RabbitMQ的消息過期是基于追溯方式來實現(xiàn)的,也就是說當(dāng)一個消息的TTL到期以后不一定會被移除或投遞到死信交換機,而是在消息恰好處于隊首時才會被處理,本篇文章給大家介紹spring boot Rabbit高級教程,感興趣的朋友一起看看吧
    2023-10-10
  • 詳解Spring Bean 之間的特殊關(guān)系

    詳解Spring Bean 之間的特殊關(guān)系

    在 Spring 容器中,兩個 Bean 之間除了通過 <ref> 建立依賴關(guān)系外,還存在著一些特殊關(guān)系。這篇文章給大家想想介紹了Spring Bean 之間的特殊關(guān)系,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2018-05-05
  • StateMachine 狀態(tài)機機制深入解析

    StateMachine 狀態(tài)機機制深入解析

    這篇文章主要介紹了,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08

最新評論

鹤岗市| 岳普湖县| 吕梁市| 原平市| 吕梁市| 永康市| 屯留县| 法库县| 康定县| 大洼县| 六盘水市| 垫江县| 南宁市| 丹阳市| 嘉黎县| 凯里市| 青阳县| 远安县| 塔河县| 徐汇区| 新野县| 德兴市| 万宁市| 高台县| 京山县| 搜索| 海林市| 黔江区| 麻城市| 乌恰县| 英吉沙县| 金门县| 乌拉特中旗| 南澳县| 沙田区| 祁东县| 九龙县| 邵东县| 和龙市| 德惠市| 平罗县|