SpringBoot+Mybatis +vue 实现登录 注册 还有验证码的。

SpringBoot+Mybatis +vue 实现登录 注册 还有验证码的。

不是前后端分离的

 

 

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <link rel="stylesheet" href="../../css/base.css">
    <link rel="stylesheet" href="../../css/element.css">
</head>
<body style="background:url('../../images/bg.jpg') no-repeat; background-size: cover;">
    <div id="wrapper">
        <div style="width: 500px; margin: 150px auto; background-color:rgba(100,149,237,0.5); border-radius: 10px">
            <div style="width: 100%; height: 100px; font-size: 30px;line-height: 100px; text-align: center; color: darkblue">欢迎登录后台管理系统</div>
            <div style="margin-top: 25px; width: 100%; height: 320px;">
                <div style="width: 60%; margin: 0 auto">
                    <input v-model="user.username" type="text" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 100%" placeholder="请输入账号">
                    <input v-model="user.password" type="password" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 100%; margin-top: 25px" placeholder="请输入密码">
                    <div style="margin-top: 25px; line-height: 40px">
                        <input v-model="user.code" type="text" style="border: 1px solid #ccc; padding: 10px; width: 65%; " placeholder="请输入验证码">
                        <div id="picyzm" style="display: inline-block; height: 35px; vertical-align: middle;"></div>
                    </div>

                    <button @click="login" style="height: 40px; padding: 10px; width: 100%; margin-top: 25px; background-color: steelblue; color: white">登录</button>
                    <a style="width: 100%; text-align: right; display: inline-block; margin-top: 25px; color: darkblue" href="register.html">还没账号?去注册</a>
                </div>

            </div>
        </div>
    </div>

    <script src="../../js/jquery.min.js"></script>
    <script src="../../js/vue.min.js"></script>
    <script src="../../js/element.js"></script>
    <script src="../../js/gVerify.js"></script>

    <script>
        //初始化验证码
        let  verifyCode;

        new Vue({
            el: "#wrapper",
            data: {
                user: {}
            },
            mounted() {
                verifyCode = new GVerify({
                    id: "picyzm",
                    type: "blend"
                });
            },
            methods: {
                login() {
                    if (!this.user.username) {
                        this.$message({
                            message: "请输入用户名",
                            type: "error"
                        });
                        return;
                    }
                    if (!this.user.password) {
                        this.$message({
                            message: "请输入密码",
                            type: "error"
                        });
                        return;
                    }
                    if (!this.user.code) {
                        this.$message({
                            message: "请输入验证码",
                            type: "error"
                        });
                        return;
                    }
                    let res = verifyCode.validate(this.user.code);
                    if (!res) {
                        this.$message({
                            message: "验证码错误",
                            type: "error"
                        });
                        return;
                    }
                    $.ajax({
                        url: "/user/login",
                        type: "POST",
                        contentType: "application/json",
                        data: JSON.stringify(this.user)
                    }).then(res => {
                        if (res.code === '0') {
                            this.$message({
                                message: "登录成功",
                                type: "success"
                            });
                            sessionStorage.setItem("user", JSON.stringify(res.data));
                            setTimeout(() => {
                                location.href= "/page/end/index.html"
                            }, 1000)
                        } else {
                            this.$message({
                                message: res.msg,
                                type: "error"
                            })
                        }
                    })
                }
            }
        })

    </script>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <link rel="stylesheet" href="../../css/base.css">
    <link rel="stylesheet" href="../../css/element.css">
</head>
<body style="background:url('../../images/bg1.jpg') no-repeat; background-size: cover;">
    <div id="wrapper">
        <div style="width: 500px; margin: 150px auto;background-color:rgba(100,149,237,0.5); border-radius: 10px">
            <div style="width: 100%; height: 100px; color: darkblue; font-size: 30px;line-height: 100px; text-align: center">欢迎注册</div>
            <div style="margin-top: 25px; width: 100%; height: 350px; text-align: center">
                <input v-model="user.username" type="text" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 60%" placeholder="请输入账号">
                <input v-model="user.password" type="password" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 60%; margin-top: 20px" placeholder="请输入密码">
                <input v-model="user.email" type="text" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 60%;  margin-top: 20px" placeholder="请输入邮箱">
                <input v-model="user.phone" type="text" style="border: 1px solid #ccc; height: 40px; padding: 10px; width: 60%;  margin-top: 20px" placeholder="请输入电话">
                <button @click="register" style="height: 40px; padding: 10px; width: 60%; margin-top: 25px; background-color: steelblue; color: white">注册</button>
                <div style="margin-top: 25px">
                    <a style="width: 60%; text-align: right; display: inline-block; color: darkblue" href="login.html">已有账号,去登录</a>
                </div>
            </div>
        </div>
    </div>

    <script src="../../js/jquery.min.js"></script>
    <script src="../../js/vue.min.js"></script>
    <script src="../../js/element.js"></script>

    <script>
        new Vue({
            el: "#wrapper",
            data: {
                user: {}
            },
            methods: {
                register() {
                    if (!this.user.username) {
                        this.$message({
                            message: "请输入用户名",
                            type: "error"
                        });
                        return;
                    }
                    if (!this.user.password) {
                        this.$message({
                            message: "请输入密码",
                            type: "error"
                        });
                        return;
                    }
                    $.ajax({
                        url: "/user/register",
                        type: "POST",
                        contentType: "application/json",
                        data: JSON.stringify(this.user)
                    }).then(res => {
                        if (res.code === '0') {
                            this.$message({
                                message: "注册成功",
                                type: "success"
                            });
                            sessionStorage.setItem("user", JSON.stringify(res.data));
                            setTimeout(() => {
                                location.href= "/page/end/index.html"
                            }, 1000)
                        } else {
                            this.$message({
                                message: res.msg,
                                type: "error"
                            })
                        }
                    })
                }
            }
        })
    </script>
</body>
</html>

 

UserController.java

package com.example.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.common.Result;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@RestController
@RequestMapping("/user")
public class UserController {
    public static final ConcurrentHashMap<String, User> MAP = new ConcurrentHashMap<>();

    @Resource
    private UserService userService;


    /**
     * 登录
     *
     * @param user
     * @param request
     * @return
     */
    @PostMapping("/login")
    public Result<User> login(@RequestBody User user, HttpServletRequest request) {
        User res = userService.login(user);
        request.getSession().setAttribute("user", user);
        MAP.put(res.getUsername(), res);

        return Result.success(res);
    }

    /**
     * 注册
     *
     * @param user
     * @param request
     * @return
     */
    @PostMapping("/register")
    public Result<User> register(@RequestBody User user, HttpServletRequest request) {
        if (user.getPassword() == null) {
            user.setPassword("123456");
        }
        User dbUser = userService.register(user);
        request.getSession().setAttribute("user", user);
        return Result.success(dbUser);
    }

    @GetMapping("/logout")
    public Result<?> logout(HttpServletRequest request) {
        User user = (User) request.getSession().getAttribute("user");
        if (user != null) {
            request.getSession().removeAttribute("user");
            MAP.remove(user.getUsername());
        }
        return Result.success();
    }

    @GetMapping("/online")
    public Result<Collection<User>> online(HttpServletRequest request) {
        return Result.success(MAP.values());
    }

    @PostMapping
    public Result<?> save(@RequestBody User user) {
        if (user.getPassword() == null) {
            user.setPassword("123456");
        }
        return Result.success(userService.save(user));
    }

    @PutMapping
    public Result<?> update(@RequestBody User user) {
        return Result.success(userService.updateById(user));
    }

    @DeleteMapping("/{id}")
    public Result<?> delete(@PathVariable Long id) {
        userService.removeById(id);
        return Result.success();
    }

    @GetMapping("/{id}")
    public Result<User> findById(@PathVariable Long id) {
        return Result.success(userService.getById(id));
    }

    @GetMapping("/detail/{username}")
    public Result<User> findByUsername(@PathVariable String username) {
        return Result.success(userService.getbyUsername(username));
    }

    @GetMapping
    public Result<List<User>> findAll() {
        return Result.success(userService.list());
    }

    @GetMapping("/page")
    public Result<IPage<User>> findPage(@RequestParam(required = false, defaultValue = "") String name,
                                        @RequestParam(required = false, defaultValue = "1") Integer pageNum,
                                        @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
        return Result.success(userService.page(new Page<>(pageNum, pageSize),
                Wrappers.<User>lambdaQuery().like(User::getUsername, name).orderByDesc(User::getId)));
    }

    @GetMapping("/export")
    public void export(HttpServletResponse response) throws IOException {

        List<Map<String, Object>> list = CollUtil.newArrayList();

        List<User> all = userService.list();
//        从userList集合中,依次取出一个对象
        for (User user : all) {
            Map<String, Object> row1 = new LinkedHashMap<>();
            row1.put("名称", user.getUsername());
            row1.put("手机", user.getPhone());
            row1.put("邮箱", user.getEmail());
            list.add(row1);
        }

        // 2. 写excel
        ExcelWriter writer = ExcelUtil.getWriter(true);
        writer.write(list, true);

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        String fileName = URLEncoder.encode("用户信息", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");

        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        writer.close();
        IoUtil.close(System.out);
    }

}

实体类

public class User extends Model<User> {
    /**
      * 主键
      */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String username;

    private String password;

    private String email;

    private String phone;

    private String avatar;

userService


@Service
public class UserService extends ServiceImpl<UserMapper, User> {

    @Resource
    private UserMapper userMapper;

    @Resource
    private RoleService roleService;

    public User login(User user) {
        User one = getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, user.getUsername()).eq(User::getPassword, user.getPassword()));
        if (one == null) {
            throw new CustomException("-1", "账号或密码错误");
        }
        setPermission(one);
        return one;
    }

    public User register(User user) {
        User one = getOne((Wrappers.<User>lambdaQuery().eq(User::getUsername, user.getUsername())));
        if (one != null) {
            throw new CustomException("-1", "用户已注册");
        }
        if (user.getPassword() == null) {
            user.setPassword("123456");
        }
        save(user);
        return getOne((Wrappers.<User>lambdaQuery().eq(User::getUsername, user.getUsername())));
    }

userMapper

package com.example.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;

public interface UserMapper extends BaseMapper<User> {

}

 

 

user.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

</mapper>
### 回答1: Spring Boot 是一个用于创建和部署独立的、基于生产级别的Spring应用程序的框架。它简化了以往使用Spring框架所需的大量配置,并提供了自动化的依赖管理和容器配置。 MyBatis 是一个优秀的持久化框架,它可以简化数据库操作并提供了强大的SQL语句管理和映射功能。通过MyBatis,我们可以使用简洁的XML或注解来描述数据库映射关系,实现与数据库的交互。 Vue 是一套用于构建用户界面的渐进式JavaScript框架。它拥有响应式数据绑定和组件化的架构,可以帮助我们更快速、高效地开发交互式的前端应用程序。 一个基于Spring Boot、MyBatisVue的系统实现可以如下进行: 1. 在Spring Boot中,我们可以使用Spring Initializr快速生成一个基础项目,添加Spring Boot和MyBatis相关的依赖项。 2. 创建Java实体类,用于映射数据库表结构。可以使用注解或XML配置文件定义实体类的属性和数据库字段的映射关系。 3. 编写MyBatis的映射文件或注解,实现数据库操作的CRUD功能。可以使用MyBatis的动态SQL语句,根据实际需要灵活构建查询条件。 4. 在Spring Boot中配置数据源和MyBatis相关的属性,使其能够正确地连接和操作数据库。 5. 创建Spring Boot的控制器,处理前端请求并调用MyBatis的相应方法进行数据库操作。可以使用@RestController注解定义RESTful API接口。 6. 在Vue中创建组件,用于展示和接收用户的界面操作。可以使用Vue的数据绑定和组件化特性,实现页面的动态更新和交互。 7. 使用Vue的路由功能实现前端页面的导航和页面切换。可以通过定义不同的路由规则,让用户能够在不同的页面间进行导航。 8. 发布项目时,使用Spring Boot提供的打包工具将系统打包为可执行的JAR文件,并部署到服务器上。 通过以上步骤,我们可以基于Spring Boot、MyBatisVue实现一个完整的系统。Spring Boot负责处理后端的业务逻辑和数据库操作,MyBatis负责与数据库进行交互,Vue负责构建交互式的前端界面。整体架构简洁清晰,开发效率提高,系统性能良好。 ### 回答2: SpringBoot是一个易于上手的Java开发框架,可以快速搭建稳定高效的Web应用程序。它提供了自动化配置和默认约定来简化开发过程,并集成了许多常用的第三方库和工具,如MyBatisMyBatis是一种流行的持久层框架,用于将Java对象和关系数据库之间进行映射。它通过提供一个简单的、方便的方式来执行SQL查询和更新,从而实现了数据的持久化。在SpringBoot中使用MyBatis,可以通过注解或XML文件来定义数据库操作,并结合MyBatis的动态SQL功能实现灵活的数据库访问。 Vue是一个轻量级的JavaScript框架,用于构建用户界面。它采用组件化的开发模式,将页面拆分成多个可重用的组件,使得前端开发更加高效和模块化。Vue还提供了响应式的数据绑定和虚拟DOM技术,可以快速地构建交互式的单页应用。 在一个系统中,可以使用SpringBoot + MyBatis + Vue的组合来完成各个层面的功能SpringBoot作为后端框架,负责处理业务逻辑,提供RESTful API接口,并通过MyBatis与数据库进行交互。MyBatis则负责将Java对象和数据库之间进行映射,执行SQL查询和更新操作。 而Vue作为前端框架,负责渲染页面、处理用户交互,并通过调用后端提供的API接口获取和提交数据。Vue通过组件化的方式来构建页面,每个组件负责渲染一个部分,最终组合成完整的页面。 在实现过程中,可以使用Vue的路由功能实现前端页面的导航和跳转,通过axios等网络请求库与后端进行数据交互。同时,可以利用SpringBoot的自动化配置和注解功能来简化后端开发,提高开发效率。通过整合SpringBootMyBatisVue,可以快速搭建一个稳定高效的系统,实现业务需求。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roam-G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值