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

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

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


第一步:在后端创建一个生成随机验证码的工具类和接收请求验证码的接口。工具类的主要作用生成随机验证码和对应的图片。接口的作用是将生成的随机验证码保存到session,同时,将图片进行base64编码,然后返回给前端。

第二步:在登录页面创建的同时获取验证码,并将后端传回来得key和编码后的字符串拼接,绑定img标签的src属性。此外,当用户点击验证码的img标签时,重新获取验证码,后端session更新验证码。

第三步:后端登录接口接收登录请求时,将用户提交的验证码和session中的验证码进行比对,不相同则返回相应信息给前端进行提示,相同则进行账号密码的匹配。


实验截图

ff6e77dec97b453183c83a7c8d910443.png


关键代码如下:

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框架,那么这本书绝对值得一读。


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


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


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


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


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


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


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


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


相关文章
|
11月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
671 7
|
6月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
808 4
基于springboot+vue开发的会议预约管理系统
|
7月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
393 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
11月前
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
373 0
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
639 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
9月前
|
监控 数据可视化 JavaScript
springboot + vue的MES系统生产计划管理源码
MES系统(制造执行系统)的生产计划管理功能是其核心模块之一,涵盖生产计划制定与优化、调度排程、进度监控反馈、资源管理调配及可视化报告五大方面。系统基于SpringBoot + Vue-Element-Plus-Admin技术栈开发,支持多端应用(App、小程序、H5、后台)。通过实时数据采集与分析,MES助力企业优化生产流程,适用于现代化智能制造场景。
478 1
|
10月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
775 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
11月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
935 6
|
11月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
1130 0
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
3368 5

热门文章

最新文章