SpringBoot整合vue-admin-template实现登录

2023-10-30

vue-admin-template简介

前后端分离开发模式越来越受开发人员的喜爱,开源项目vue-admin-template 是一个后台前端解决方案,它基于 vue 和 element-ui实现。更多详情请阅读vue-template-admin官网,vue-admin-template项目是其基础模板,本文基于vue-admin-template实现与SpringBoot的整合

下载源码

从github上下载源码,github地址

环境搭建

将源码导入Visual Studio Code开发工具,在终端执行npm install安装依赖,前提是本机已安装了vue和node.js,需要参考如何安装Visual Studio Code的小伙伴,可以阅读Win10安装VSCode详细步骤,需要了解如何安装node.js和vue的小伙伴,可以参考win10安装node.js和vue并配置环境变量。依赖安装完成后,执行npm run dev命令启动项目,项目启动成功后,会直接弹出登录界面
登录
也可以看VSCode终端的启动日志
启动
直接点击登录,进入首页
首页
以上是vue-admin-template自带的登录功能,点击登录时,F12打开浏览器调试界面,在network下面可以看到登录的请求地址和请求参数以及需要返回的数据。请求地址
请求参数
登录返回
也就是说要实现数据库登录,我们需要在后端提供一个登录接口,并接收username和password请求字段。后台需要给前端返回一个状态码2000和一个token值。
登录时还访问了一个info接口,获取登录用户的信息
查询信息
查询返回
info接口前端会传登录接口返回的token作为信息查询的请求参数,需要返回一个状态码和data数据集,其中有角色roles、介绍introduction、头像地址avatar和名称name四个字段。下面介绍如何使用SpringBoot搭建后台管理系统实现与vue-admin-template的整合

SpringBoot整合vue-admin-template

在IDEA中新建一个SpringBoot项目,创建过程这里不作介绍

技术栈

SpringBoot2.3.4
jjwt0.9.1
Mybatis-Plus3.4.0
Maven3.6.1
MySql5.7

pom.xml中引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<!--token生成和解析-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>${jjwt.version}</version>
</dependency>

application.yml中添加配置

server:
  port: 8080
  servlet:
    context-path: /
spring:
  devtools:
    restart:
      enabled: true #开启热部署
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.108.11:3306/baojia?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root
    hikari:
      minimum-idle: 5 #最小空闲连接数
      maximum-pool-size: 15 #最大连接数,默认10
      auto-commit: true #自动提交,默认true
      idle-timeout: 30000 #空闲连接存活最大时间,默认600000(10分钟)
      pool-name: BaojiaHikariCP #连接池名称
      max-lifetime: 1800000 #最长生命周期,默认1800000(30分钟),0表示无限生命周期
      connection-timeout: 30000 #连接超时时间,默认30秒
      connection-test-query: SELECT 1 #连接测试查询
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
mybatis-plus:
  mapper-locations: classpath:mapper/**/*Mapper.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-aliases-package: com.xlhj.baojia.entity
logging:
  config: classpath:logback-spring.xml
  level:
    com.xlhj.baojia: debug
jwt:
  header: Authorization
  tokenSecret: qazxswedcvfrtgbnhyujmkiolp #密钥
  tokenExpired: 3600000 #token过期时间(30分钟)

登录控制器核心代码

/**
 * 登录
 * @return
 */
@PostMapping("/login")
public ResultData login(@RequestBody LoginBody loginBody) {
    try {
        SysUser currentUser = userService.validateUser(loginBody);
        if (currentUser != null) {
            String token = jwtToken.generateToken(currentUser);
            return ResultData.ok(ResultCode.SUCCESS, "登录成功!").data("token", token);
        } else {
            return ResultData.error(ResultCode.ERROR, "用户名或密码不正确!");
        }
    } catch (Exception e) {
        return ResultData.error(ResultCode.ERROR, e.getMessage());
    }
}

/**
 * 获取用户信息
 * @return
 */
@GetMapping("info")
public ResultData getInfo(@RequestParam String token) {
    String username = jwtToken.getUsernameFromToken(token);
    SysUser currentUser = userService.selectUserByUsername(username);
    Set<String> roleSet = new HashSet<>();
    if (currentUser != null) {
        roleSet = roleService.selectRoleCodeByUserId(currentUser.getId());
        Boolean flag = jwtToken.validateToken(token, currentUser.getUserName());
        if (flag && !roleSet.isEmpty()) {
            return ResultData.ok().data("roles", roleSet).data("name", currentUser.getUserName()).data("avatar", currentUser.getAvatar());
        } else {
            return ResultData.error();
        }
    } else {
        return ResultData.error();
    }
}

修改前端项目中请求地址

将src/api/下的user.js文件中url统一修改为/user开头
user.js

修改.env.development文件中的请求地址

请求地址

修改vue.config.js文件

vue.config

修改用户登录页面

将默认的密码修改为数据库已有的密码或者去掉默认密码
login

测试

启动后台系统和前端项目,浏览器输入访问地址http://localhost:9528/
跨域
点击登录按钮时,页面报错,这是因为前后端不同的端口,存在跨域问题,在登录控制器上加上@CrossOrigin注解即可,再次启动项目,访问http://localhost:9528/
首页
至此,SpringBoot整合vue-admin-template实现登录功能完成,完整代码详见码云地址
需要了解SpringBoot整合vue-admin-template实现菜单动态加载的详细步骤,请参阅SpringBoot2.3整合vue-admin-template实现动态路由

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合vue-admin-template实现登录 的相关文章

随机推荐

  • 常见前端浏览器兼容问题及解决方案

    常见前端浏览器兼容问题及解决方案 所谓的浏览器兼容性问题 是指因为不同的浏览器对同一段代码有不同的解析 造成页面显示效果不统一的情况 在大多数情况下 我们的需求是 无论用户用什么浏览器来查看我们的网站或者登陆我们的系统 都应该是统一的显示效
  • gensim实战01——word2vec

    介绍 搜狗语料库 http www sogou com labs resource list yuliao php 是可以免费获取的比较大的中文新闻语料库 可是最新的也就是更新到2012年的语料 后续并无放出更新的语料 除了搜狗语料 要获取
  • SpringMVC5.x从入门到精通_完整版

    什么是SpringMVC 一 SpringMVC的概述 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架 即使用了MVC架构模式的思想 将web层进行职责解耦 基于请求驱动指的就是
  • 使用python的socket进行多个文件传输

    使用python的socket进行多个文件传输 在网上学习到了基本的socket使用 但与自己想要的效果不同 所以进行了修改实现了在局域网内进行多文件传输 但是还有一些小bug不知道为什么有时候进行传输时 会显示您的主机中的软件中止了一个已
  • 从零搭建若依环境(分离版)

    1 起步 1 1 准备工作 JDK gt 1 8 推荐1 8版本 Mysql gt 5 5 0 推荐5 7版本 Redis gt 3 0 Maven gt 3 0 Node gt 10 1 2 下载若依 使用git克隆 命令为 git cl
  • Markdown语法之数学公式【总结】

    目录 数学运算符号 长空格 分数 角标 上下划线 无穷大 求和符号 累乘符号 余积符号 集合运算 上下位符号 圆括号 省略号 应用 根号 对数 积分 逻辑符号 箭头 三角函数 给公式编号 其他省略号 行列式 矩阵 向量 花括号 上下花括号
  • Linux - 快速进入目录的方法

    Linux 快速进入目录的方法 目录 cd命令技巧 其他常用方法 长目录 回到顶部 cd命令技巧 直接进入用户的home目录 cd 进入上一个目录 cd 进入当前目录的上一层目录 cd 进入当前目录的上两层目录 cd 回到顶部 其他常用方法
  • 汇编语言数据处理长度(X ptr指令解析)

    文章目录 1 通过寄存器名指明要处理的数据的尺寸 2 在没有寄存器名存在的情况下 用操作符 X ptr 指明内存单元的长度 X在汇编指令中可以为byte word或dword 3 其他方法 8086CPU的指令 可以处理两种尺寸的数据 by
  • 有序性保障:X86 CPU内存屏障和JSR内存屏障

    一 X86 CPU内存屏障 sfence 在sfence指令前的写操作当必须在sfence指令后的写操作前完成lfence 在Ifence指令前的读操作当必须在Ifence指令后的读操作前完成mfence 在mfence指令前的读写操作当必
  • 密钥繁多难记难管理?认识高效密钥管理体系

    密钥设置是否只要够安全就能够重复使用 定期修改密钥到底有没有必要 密钥不幸遗失该如何恢复 素未谋面的双方 如何才能安全地进行密钥协商 上一论我们了解到 基于密码学的隐私保护方案 其有效性很大程度上取决于能否有效管理好密钥 这里 我们将进一步
  • Oracle创建临时表

    Oracle临时表 临时表是一种特殊的表 当需要对某一 也可以是多个 表中的一批数据进行反复的操作时 通过为这批数据创建一个临时表 可能会简化操作并且有可能提高效率 语法 CREATE GLOBAL TEMPORARY TABLE 临时表空
  • 【C语言】——调试技巧

    目录 编辑 前言 1 什么是Bug 2 什么是调试 2 1调试的基本步骤 2 2Release与Debug 3 常用快捷键 4 如何写出好的代码 4 1常见的coding技巧 assert const const修饰指针 前言 调试是每个程
  • linux系统下部署python自动化程序并配置Jenkins定时执行

    问题 自动化测试脚本代码咱已经有了 项目地址Python接口自动化框架 那么该如何部署到我们的服务器上 在服务器上定时自动执行呢 思路 首先 我们要统一环境 大家知道 python2和python3的语法和库有很多改动 而大多服务器自带的p
  • spring boot 使用@ConfigurationProperties

    有时候有这样子的情景 我们想把配置文件的信息 读取并自动封装成实体类 这样子 我们在代码里面使用就轻松方便多了 这时候 我们就可以使用 ConfigurationProperties 它可以把同类的配置信息自动封装成实体类 首先在配置文件里
  • XSS之xss-labs-level3

    文章目录 0x01 XSS Labs 0x02 实验工具 0x03 实验环境 0x04 实验步骤 0x05 实验分析 0x06 参考链接 0x01 XSS Labs XSS 跨站脚本攻击 是指恶意攻击者往Web页面里插入恶意Script代码
  • css伪元素实现选中效果【打勾效果】

    css伪元素实现选中效果 item border 1px solid 00a9ff position relative after position absolute content width 0px height 0px top 0px
  • 基于SECS协议开发的简明教程(7)

    接着前面6篇SECS GEM开发教程系列 基于SECS协议开发的简明教程 1 怎么搭建支持SECS工程 基于SECS协议开发的简明教程 2 怎么编辑交换数据的ID 基于SECS协议开发的简明教程 3 怎么收 发控制命令和数据消息 基于SEC
  • FA萤火虫算法求解二元四峰函数的简单例子(python代码)

    这个代码是应付智能优化的课的 代码有些地方有些重复啰嗦 请大家担待 可视化都是自己搞得 好多for循环打印 有些地方完全可以构造函数 大家有需要可以自己改一下 import random import numpy as np import
  • python--支持向量机应用小例

    以下内容笔记出自 跟着迪哥学python数据分析与机器学习实战 外加个人整理添加 仅供个人复习使用 SVM的分类效果 软间隔的作用 复杂算法容易造成过拟合 如何解决 核函数的作用 核函数的作用 可以实现非线性分类 import numpy
  • SpringBoot整合vue-admin-template实现登录

    vue admin template简介 前后端分离开发模式越来越受开发人员的喜爱 开源项目vue admin template 是一个后台前端解决方案 它基于 vue 和 element ui实现 更多详情请阅读vue template