Springboot+vue 前后端分离登录验证码功能

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。Springboot+vue 前后端分离登录验证码功能,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Springboot+vue 前后端分离登录验证码功能

第一步:在后端创建一个生成随机验证码的工具类和接收请求验证码的接口。工具类的主要作用生成随机验证码和对应的图片。接口的作用是将生成的随机验证码保存到session,同时,将图片进行base64编码,然后返回给前端。 
第二步:在登录页面创建的同时获取验证码,并将后端传回来得key和编码后的字符串拼接,绑定img标签的src属性。此外,当用户点击验证码的img标签时,重新获取验证码,后端session更新验证码。 
第三步:后端登录接口接收登录请求时,将用户提交的验证码和session中的验证码进行比对,不相同则返回相应信息给前端进行提示,相同则进行账号密码的匹配。

实验截图

Springboot+vue 前后端分离登录验证码功能

关键代码如下: 

 element-plus 前端页面

<template>

    <el-form
            ref="ruleFormRef"
            :model="ruleForm"
            :rules="rules"
            label-width="120px"
            class="demo-ruleForm"
            :size="formSize"
            status-icon
    >
        <el-form-item label="姓名" prop="username">
            <el-input  v-model="ruleForm.username" placeholder="请输入账号用户名">
                <template #prefix><el-icon><User /></el-icon></template>
            </el-input>
        </el-form-item>
        <el-form-item label="密码"  prop="password">
            <el-input v-model="ruleForm.password" placeholder="请输入账号密码">
                <template #prefix><el-icon><User /></el-icon></template>
            </el-input>
        </el-form-item>
        <el-form-item label="验证码" prop="checkcode">
            <el-input placeholder="请输入验证码" v-model="ruleForm.checkcode"></el-input>
            <img :src="checkcodeurl" @click="getcode">
        </el-form-item>
        <el-form-item prop="">
            <el-checkbox v-model="ruleForm.rememberme " v-bind:lable="true">记住我</el-checkbox>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click="submitForm(ruleFormRef)">
                登录
            </el-button>
            <el-button @click="resetForm(ruleFormRef)">重置</el-button>
        </el-form-item>


    </el-form>
</template>

<script lang="ts"  setup>


    import { reactive, ref } from 'vue'
    import type { FormInstance, FormRules } from 'element-plus'
    import request from "../utitiles/request"
    import {ElMessage} from "element-plus";
    import axios from "axios";

    const formSize = ref()
    const ruleFormRef = ref<FormInstance>()
    const ruleForm = reactive({
       username:'',
        password:'',
        checkcode:'',
        rememberme:''
    })
    const checkcodeurl=ref("http://localhost:8080/login/getcode?"+new Date().getTime())
    const getcode=()=>{
        checkcodeurl.value="http://localhost:8080/login/getcode?"+new Date().getTime()
    }

    const rules = reactive<FormRules>({
        username: [
            { required: true, message: 'Please input username', trigger: 'blur' },
            { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' },
        ],
        password: [
            { required: true, message: 'Please input username', trigger: 'blur' },
        ],
        checkcode:[
            { required: true, message: '请输入验证码', trigger: 'blur' },
        ]
    })

    const submitForm = async (formEl: FormInstance | undefined) => {
        if (!formEl) return
        await formEl.validate((valid, fields) => {
            if (valid) {
               request.get("/login",{
                   params:{
                       username:ruleForm.username,
                       password:ruleForm.password,
                       checkcode:ruleForm.checkcode
                   }
               }).then(response=>{
                   console.log(response.data)
                   if(response.data=="success"){
                      alert("登录成功")
                   }
                   else
                       alert("登陆失败")
               })

            } else {
                console.log('error submit!', fields)
            }
        })
    }

    const resetForm = (formEl: FormInstance | undefined) => {
        if (!formEl) return
        formEl.resetFields()
    }



</script>

 验证码这里我采取redis进行存储,java后端代码如下

@Controller
public class MyblogController {
    @Autowired
    RedisUtil redisUtil;
    @Autowired
    LoginMapper loginMapper;

    @RequestMapping("/login/getcode")
    public void getcode(HttpServletResponse response) throws IOException {
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(116, 30, 4, 10);
        redisUtil.set("code",circleCaptcha.getCode());
        ServletOutputStream outputStream = response.getOutputStream();
        circleCaptcha.write(outputStream);
        outputStream.close();
    }



    @RequestMapping("/login")
    @ResponseBody
    public String  login(String username,String password,String checkcode){
        QueryWrapper<Login> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("username",username).eq("password",password);
        Login login = loginMapper.selectOne(queryWrapper);
        String code=(String)redisUtil.get("code");
        if(login!=null&&code.equals(checkcode))
            return "success";
        else
            return "error";
    }
}

番外篇

由于此篇代码较多文字较少,这里介绍Springboot从入门到实战的书评

《Springboot从入门到实战》这本书是一本非常适合Java初学者的入门指南。作者通过详细的介绍让读者了解Springboot框架的基本原理以及如何使用它来构建高效的应用程序。

首先,本书介绍了Springboot框架的基本概念和背景。阐述了Springboot对于Java开发者来说有多么重要,以及其优势和特点,包括自动配置、快速开发等方面的内容。同时还介绍了Springboot的历史,让读者对该框架有一个更加深入的认识。

接着,作者开始讲解如何使用Springboot框架进行项目构建。从环境搭建、依赖管理到基本的应用程序搭建,都有详细的讲解。书中还提供了很多代码示例和实例让读者更好地掌握Springboot的使用方法。

除此之外,本书还介绍了Springboot框架的高级特性,如如何集成MyBatis等ORM框架、如何使用Spring Security进行权限控制等。这些内容不仅可以帮助读者进一步深入了解Springboot框架,同时也可以帮助读者开发出更加完善的应用程序。

总的来说,《Springboot从入门到实战》是一本非常好的学习Springboot框架的书籍。它不仅详细介绍了Springboot框架的基础和高级特性,而且还提供了很多实例和代码示例,可以帮助读者更好地掌握该框架的使用方法。如果你是Java初学者,并且想要深入学习Springboot框架,那么这本书绝对值得一读。

关于如何将这些原则实施到日常生活中的可操作步骤列表:

  1. 了解自己的目标和动机 – 明确自己为什么要追求成功,设定具体的目标。

  2. 制定计划 – 根据自己的目标和时间安排,制定周密的计划。

  3. 持之以恒 – 勇敢面对困难,在遇到挫折时不要放弃,坚持下去。

  4. 学习新知识 – 不断学习新的技能和知识,以保证自己在行业中处于领先地位。

  5. 与他人合作 – 学会与他人合作、交流、分享,以达到更好的成果。

  6. 精通细节 – 在实际操作中注重细节,不断完善自己的工作流程和技能。

  7. 保持积极态度 – 保持乐观、积极的心态,用积极的情绪来影响周围的人和事物。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/197073.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!