Vue+Springboot实现登录注册
2020-06-19 10:40
288 查看
一、Vue登录注册页面内容
<template> <div id="login" v-loading="loading" element-loading-text="登录中..."> <el-form class="container" :model="loginForm" status-icon :rules="rules" ref="loginForm" v-show="showLogin" label-width="100px"> <h3 class="title">MyVue 系统用户登录</h3> <el-form-item label="用户名:" prop="username"> <el-input type="username" v-model="loginForm.username" autocomplete="off"></el-input> </el-form-item> <el-form-item label="密码:" prop="password"> <el-input type="password" v-model="loginForm.password" autocomplete="off"></el-input> </el-form-item> <el-form-item label="验证码:" prop="validCode" class="validCode"> <el-input v-model.number="loginForm.validCode"></el-input> <el-image :src="codeUrl" @click="getValidCode" class="login-code"></el-image> </el-form-item> <el-form-item> <el-button type="primary" @click="login('loginForm')">登录</el-button> <el-button @click="resetForm('loginForm')">重置</el-button> <el-link type="primary" :underline="false" @click="showChange">-> 去注册</el-link> </el-form-item> </el-form> <el-form class="container" :model="registerForm" status-icon :rules="rules" ref="registerForm" v-show="!showLogin" label-width="100px"> <h3 class="title">MyVue 系统用户注册</h3> <el-form-item label="用户名:" prop="username"> <el-input type="username" v-model="registerForm.username" autocomplete="off"></el-input> </el-form-item> <el-form-item label="密码:" prop="password"> <el-input type="password" v-model="registerForm.password" autocomplete="off"></el-input> </el-form-item> <el-form-item label="确认密码:" prop="rePassword"> <el-input type="rePassword" v-model="registerForm.rePassword" autocomplete="off"></el-input> </el-form-item> <el-form-item label="验证码:" prop="validCode" class="validCode"> <el-input v-model.number="registerForm.validCode"></el-input> <el-image :src="codeUrl" @click="getValidCode" class="login-code"></el-image> </el-form-item> <el-form-item> <el-button type="primary" @click="register('registerForm')">注册</el-button> <el-button @click="resetForm('registerForm')">重置</el-button> <!-- #606266 #5cb6ff--> <el-link type="primary" :underline="false" @click="showChange">-> 去登录</el-link> </el-form-item> </el-form> </div> </template> <script> export default { name: 'Login', data () { var validateChkcode = (rule, value, callback) => { if (value === '') { return callback(new Error('请输入验证码!')) } callback() } var validateUsername = (rule, value, callback) => { if (value === '') { callback(new Error('请输入用户名!')) } else if (!this.showLogin) { // 异步原因,不会等待返回后再执行后面流程,而是直接执行else后面的语句 this.$get('user/chkUsername', this.registerForm).then(retDate => { if (retDate === 1) { callback(new Error('该用户名已经存在!')) } callback() }) } else { callback() } } var validatePassword = (rule, value, callback) => { if (value === '') { callback(new Error('请输入密码!')) } callback() } var validateRePassword = (rule, value, callback) => { if (value === '') { callback(new Error('请再次输入密码!')) } else if (value !== this.registerForm.password) { callback(new Error('两次输入密码不一致!')) } callback() } return { showLogin: true, loading: false, codeUrl: '', cookiePass: '', loginForm: { username: '', password: '', validCode: '', id: '' }, registerForm: { username: '', password: '', rePassword: '', validCode: '', id: '' }, rules: { username: [ { validator: validateUsername, trigger: 'blur' } ], password: [ { validator: validatePassword, trigger: 'blur' } ], validCode: [ { validator: validateChkcode, trigger: 'blur' } ], rePassword: [ { validator: validateRePassword, trigger: 'blur' } ] } } }, created () { this.getValidCode() }, methods: { showMessage (message) { this.$message.error(message) }, login (formName) { this.$refs[formName].validate((valid) => { if (valid) { this.loading = true this.$post('user/login', this.loginForm).then(retDate => { if (retDate.ok) { this.$store.dispatch('setUser', retDate) this.$router.push({path: '/'}) } else { this.showMessage(retDate.message) this.loading = false } }) } else { console.log('error submit!!') return false } }) }, register (formName) { this.$refs[formName].validate((valid) => { if (valid) { this.$post('user/register', this.registerForm).then(retDate => { if (retDate.ok) { this.$store.dispatch('setUser', retDate) // 注册成功跳转到首页 this.$message.success(retDate.message) this.$router.push({path: '/'}) } else { this.showMessage(retDate.message) } }) } else { console.log('error submit!!') return false } }) }, resetForm (formName) { this.$refs[formName].resetFields() }, getValidCode () { this.codeUrl = this.$global.baseURL + 'user/getCheckCode?' + new Date() }, showChange () { this.showLogin = !this.showLogin this.getValidCode() } } } </script> <style> #login { background:url("../assets/backImg.jpg") no-repeat; background-position: center; height: 100%; width: 100%; background-size: cover; position: fixed; } body{ margin: 0px; } .container { border-radius: 15px; background-clip: padding-box; margin: 8% auto; width: 350px; padding: 35px 35px 15px 35px; background: #fff; border: 1px solid #eaeaea; box-shadow: 0 0 25px #cac6c6; } .title { margin: 0px auto 40px auto; text-align: center; color: #505458; } .login-code { display: inline-block; height: 40px; float: right; } .validCode .el-input { float: left; width: 50%; } .el-link { margin-left: 25px; } img { float: right; } </style>
二、后台controller文件内容:
package com.login.controller; import com.login.util.DateUtil; import com.login.util.Md5Util; import com.login.util.StringUtil; import com.login.util.VerifyCodeUtil; import com.mydatasource.entity.User; import com.mydatasource.service.UserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Date; /** * 文件描述: 用户登录,注册 * * @author yuzonghao * @date 2020/05/22 14:43 **/ @RestController public class LoginController { private static Logger log = LoggerFactory.getLogger(LoginController.class); @Autowired private UserService userService; @RequestMapping("/register") public String register(HttpServletRequest request, @RequestBody User user){ String verifyCode = (String) request.getSession().getAttribute("verifyCode"); log.info("获取验证码的值为: {}",verifyCode); if (!user.getValidCode().equalsIgnoreCase(verifyCode)){ user.setOk(false); user.setMessage("验证码输入错误!"); return StringUtil.toJson(user); } user.setId(DateUtil.dataFormat(new Date(),DateUtil.DateTimeNum) + StringUtil.getRandomStr()); user.setPassword(Md5Util.encoderByMd5(user.getPassword())); int num = userService.insertUser(user); if (num <= 0){ user.setOk(false); user.setMessage("注册失败!"); return StringUtil.toJson(user); } user.setMessage("注册成功!"); return StringUtil.toJson(user); } @RequestMapping("/login") public String login(HttpServletRequest request, @RequestBody User user){ String verifyCode = (String) request.getSession().getAttribute("verifyCode"); log.info("获取验证码的值为: {}",verifyCode); if (!user.getValidCode().equalsIgnoreCase(verifyCode)){ user.setOk(false); user.setMessage("验证码输入错误!"); return StringUtil.toJson(user); } user = userService.selectUser(user.getUsername(), Md5Util.encoderByMd5(user.getPassword())); if (user == null){ return StringUtil.toJson(new User(false,"账号或密码错误!")); } return StringUtil.toJson(user); } @GetMapping("/chkUsername") public String chkUsername(@RequestParam String username){ if (userService.chkUsername(username)) return "1"; return "0"; } /** * description: 获取验证码图片 * param [response, request] * author yuzonghao * createTime 2020/3/7 13:36 **/ @GetMapping("/getCheckCode") public void getCheckCode(HttpServletResponse response, HttpServletRequest request) { try { int width = 120; int height = 40; BufferedImage verifyImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //生成对应宽高的初始图片 String randomText = VerifyCodeUtil.drawRandomText(width, height, verifyImg); request.getSession().setAttribute("verifyCode", randomText); // request.getSession().setAttribute("startTime",new Date()); response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别 OutputStream os = response.getOutputStream(); //获取文件输出流 ImageIO.write(verifyImg, "png", os);//输出图片流 os.flush(); os.close();//关闭流 } catch (IOException e) { log.error("获取验证码图片失败!", e); } } }
三、效果图:
四、开发过程中的问题:
1)、跨域问题,解决方法参考该博客中的四
相关文章推荐
- 实训总结,第一次vue+SpringBoot前后端分离开发,实现前后端分离登录注册及单表CRUD
- 初次使用springboot与jQuery实现简单的用户登录注册功能
- spring boot结合spring security实现注册后自动登录
- 利用Springboot实现了一个简单的登录注册
- SpringBoot+Vue+Jpa+Redis实现单点登录(一处登录,另一处退出登录)
- spring boot MVC 三 用户注册和登录的实现
- SpringBoot+Shiro+Vue前后端分离项目通过JWT实现自动登录
- 后端开发:SpringBoot实现注册与登录功能
- spring boot 2.0完美整合mybatis注解版 加上redis储存数据 配上freemarker模板 实现用户的登录注册
- SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)
- 搭建spring-boot+vue前后端分离框架并实现登录功能
- springboot结合全局异常处理实现登录注册验证
- vue+springboot前后端分离实现单点登录跨域问题解决方法
- 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案
- 【个人学习】使用idea搭建SpringBoot,整合Mybatis、Thymeleaf,连接数据库,实现具有前端界面项目:主要功能登录,注册,个人信息查看、更改,不定时更新中...
- spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)
- SpringBoot/SpringMVC整合Shiro(一):实现登录与注册(MD5加盐加密)
- springboot+springsecurity+阿里云短信服务验证实现注册登录
- 基于vue-admin-template+SpringBoot+JWT实现登录
- springboot +vue实现token登录2