Vue3+springboot实现简单登录demo

Vue3从0搭建脚手架步骤【默认已安装node.js

前置条件:默认已安装node.js、yarn

第一步:创建项目

选择任意一个空白文件夹如下:

cmd进入该文件夹下的命令窗口模式,然后输入指令创建vue项目:vue create my-project

选择vue版本,此次我们选择的vue3,回车

耐心等待几分钟下载完成,完成后在终端(也就是Terminal)切换到下载好的项目目录,这里指的是名为my-project的项目,如下图。如果不清楚就直接在电脑cmd窗口下执行如下命令

cd 你的项目绝对路径(从盘符开始)

cd E:\Code\personage\NewCollections\vuedemo\my-project

然后输入npm run serve运行vue项目(有的是npm run dev)

在浏览器访问项目给出的ttp://localhost:8080/地址,(我这里是 http://localhost:8080/)

浏览器出现下面这个页面说明vue脚手架搭建成功

准备改造页面:

使用idea或者vscode或者Hbuilder等等你喜欢的代码编辑器打开刚刚Vue创建的my-project项目

如下图(记住有个App.vue文件,待会儿要修改它):
我用的idea打开,然后在src下创建2个文件夹views(存放我们的页面代码)和router(存放页面之间的路由跳转规则)

在router文件夹下创建一个index.js文件

在views下新建Login和Home文件夹,并分别创建Login.vueHome.vue文件

结构如下:

打开最开始提到的App.vue页面,修改代码内容如下:

<template>

  <router-view></router-view>

</template>



<script>

export default {

  name: 'App',

}

</script>



<style>

#app {

  font-family: Avenir, Helvetica, Arial, sans-serif;

  -webkit-font-smoothing: antialiased;

  -moz-osx-font-smoothing: grayscale;

  text-align: center;

  color: #2c3e50;

  margin-top: 60px;

}

</style>



编写Home.vue代码内容

<template>

<h1>欢迎来到主页</h1>

  <div>

    <p>用户名:{{ user.username }}</p>

    <p>电话号码:{{ user.phone }}</p>

  </div>

  <button @click="logout">退出登录</button>

</template>



<script>

export default {

  name: "HomePage",

  data(){

    return{

      user:{}

    }

  },

  created() {

    //从localStorage获取用户信息

    const userStr=localStorage.getItem("user");

    if (userStr){

      this.user=JSON.parse(userStr);

    }

  },

  methods:{

    logout(){

      //清除登录状态

      localStorage.removeItem("token");

      //清除用户信息

      localStorage.removeItem("user");

      //使用 this.$router.push 进行路由跳转

      this.$router.push('/login');

    }

  }

}

</script>



<style scoped>



</style>

编写Login.vue代码内容

<template>

<div class="login-container">

  <h2>登录界面</h2>

  <form @submit.prevent="login">

    <div>

      <label for="username">用户名:

        <input type="text" v-model="username" id="username">

      </label>

    </div>

<div>

    <label for="password">密码:

      <input type="password" v-model="password" id="password">

    </label>

</div>

    <button class="center-button" type="submit">登录</button>

  </form>

</div>

</template>



<script>

import axios from 'axios';

export default {

  name: "LoginPage",

  data(){

    return{

      username:'',

      password:'',

    }

  },

  methods:{

    login() {

      // 实际的登录逻辑

      const apiUrl = "http://localhost:8089/api/login";

      const loginData = {

        username: this.username,

        password: this.password

      };

      // 发送 POST 请求

      axios.post(apiUrl, loginData)

          .then(res => {

            if (res.data.code === 200) {

              //存储用户信息到 localStorage

              localStorage.setItem("user", JSON.stringify(res.data.data))

              //存储登录状态

              localStorage.setItem("token", "123456");

              // 使用 this.$router.push 进行路由跳转

              this.$router.push('/home');

            } else {

              alert(res.data.msg);

            }

          });

    }

  }

}

</script>



<style scoped>

form {

  display: flex;

  flex-direction: column;

  margin-top: 20px;

}



label {

  margin-bottom: 5px;

}



input {

  margin-bottom: 10px;

}

.center-button {

  display: block;

  margin: 0 auto;

}



</style>

编写router下的index.js内容

import {createRouter,createWebHistory } from 'vue-router'

import Home from '../views/Home/Home.vue'

import Login from '../views/Login/Login.vue'

const routes=[

    // 跳转主页

    {

        path:'/',

        redirect:'/login'

    },

    {

        path: '/login',

        name:'LoginPage',

        component: Login

    },

    {

        path:'/home',

        name:'HomePage',

        component: Home

    }

];



const router=createRouter({

    history:createWebHistory(),

    routes

});
// main.js 中配置导航守卫

router.beforeEach((to, from, next) => {

    console.log("来源地址:", from)

    console.log("目标地址:", to)

    //验证token

    let token = localStorage.getItem('token');

    if (token|| to.path === '/login') {

        // 允许导航继续

        next();

    } else {

        // 如果用户未登录,则重定向到登录页面

        // next({ name: 'Login' });

        next('/login');

    }

});



export default router;

编写与src同级的main.js内容

import { createApp } from 'vue'

import App from './App.vue'

import router from './router'

createApp(App).use(router).mount('#app')

最后重新运行项目,执行 npm run serve

出现下面界面

编写后端springboot代码

在application.properties中配置后端项目运行端口

# 应用服务 WEB 访问端口

server.port=8089

编写控制层:

@CrossOrigin

@RestController

@RequestMapping("/api")

public class LoginController {

    @PostMapping("/login")

    public R login(@RequestBody User user){

        if (user.getUsername().equals("admin") && user.getPassword().equals("123456")){

            user.setPhone("1325474512");

            return Result.success(user);

        }else {

            return Result.error(1,"用户名或密码错误");

        }

    }

}

web的登录界面输入

账号:admin

密码:123456

然后点击登录进入如下页面:

Vue3+Springboot实现简单登录demo成功,后端java代码特别简单,需要的私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/418245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3中实现elementPlus表格选中行的上移下移

先看效果&#xff1a; 实现步骤&#xff1a; 1、给el-table添加current-change事件、高亮属性及ref属性 2、给上移下移按钮添加事件 // 定义当前选中的行参数 const currentRow ref<any>(null); // 定义表格的ref const singleTableRef ref(); // 行选中事件 const ha…

【机器学习:Recommendation System】推荐系统

推荐系统&#xff08;或推荐系统&#xff09;是一类机器学习&#xff0c;它使用数据来帮助预测、缩小范围并在呈指数级增长的选项中找到人们正在寻找的内容。 【机器学习&#xff1a;Recommendation System】推荐系统 什么是推荐系统&#xff1f;用例和应用电子商务与零售&…

阿里云轻量服务器,ubuntu20.04安装Redis

第一步&#xff1a;下载xshell7,连接阿里云服务器 就是下图这个ip 第二步&#xff1a;输入用户名和密码 上面那一步完成之后&#xff0c;就会弹出来下面这个图片 用户名是root 密码是你的阿里云服务器密码 如果你要是忘了&#xff0c;如下图&#xff0c;重置密码&#xff0…

AI Agent

目录 一、什么是Agent 二、什么是MetaGPT【多智能体框架介绍】 三、MetaGPT的背景 一、什么是Agent 智能体 LLM观察思考行动记忆 Agent&#xff08;智能体&#xff09; 一个设置了一些目标或任务&#xff0c;可以迭代运行的大型语言模型。这与大型语言模型&#xff08;LLM&am…

ywtool network命令

一.network功能介绍 network功能就是通过脚本的方式配置IP信息&#xff0c;分为4项: (1) 配置单网卡(2)配置br网桥(单网卡)(3)配置bond(两张网卡)(4)配置ovs网桥(单网卡) 日志文件:/var/log/ywtools/ywtools-network.log/usr/local/ywtools/config/config.ini中network参数:…

电子科技大学课程《计算机网络系统》(持续更新)

前言 本校的课程课时有所缩减&#xff0c;因此可能出现与你学习的课程有所减少的情况&#xff0c;因此对其他学校的同学更多的作为参考作用。本文章适合学生的期中期末考试&#xff0c;以及想要考研电子科技大学的同学&#xff0c;电子科技大学同学请先看附言。 第一章 计算…

Mac OS 制作可引导安装器并重新安装系统

Mac 使用 U盘或移动固态硬盘制作可引导的安装器&#xff08;以 Monterey 为例&#xff09; 本教程参考 Apple 官网相关教程 创建可引导 Mac OS 安装器 重新安装 Mac OS 相关名词解释 磁盘分区会将其划分为多个单独的部分&#xff0c;称为分区。分区也称为容器&#xff0c;不同…

AOP(黑马学习笔记)

AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c;让大家快速体验A…

易货模式微信小程序的可行性分析

随着移动互联网技术的快速发展&#xff0c;微信小程序作为一种轻量级的应用形态&#xff0c;已经成为众多创业者和服务提供者关注的焦点。微信小程序以其便捷的使用体验、较低的开发成本和广泛的用户基础&#xff0c;成为了各类业务模式的创新平台。在这样的背景下&#xff0c;…

图解知识蒸馏

soft labels与soft predictions越接近越好&#xff0c;通过Loss Fn来实现&#xff0c;产生的数值叫做distillation loss&#xff0c;也叫soft loss。 hard label y与hard prediction越接近越好&#xff0c;通过Loss Fn来实现&#xff0c;产生的数值叫做student loss&#xff0c…

[OpenCv]图像增强

目录 前言 一、灰度变化 二、直方图修整 1.直方图概念 2.直方图变化 3.直方图均衡化 二、图像平滑 1.卷积模板 2.均值滤波 3.高斯滤波 4.中值滤波 三、图像锐化 1.梯度算子 2.使用Laplacian算子进行锐化 3.使用Sobel算子进行锐化 四、代码总结 1.图片 2.代码 …

深度强化学习入门(待修改)

目录 前言 一、强化学习 1.马可洛夫链 2.蒙地卡罗 3.时序差分TD 4.gym学习​编辑 FrozenLake 二、RL基本算法 1.Q-learning和SARSA 2.DQN Deep network Qlearning DQN 三、PG策略算法 总结 前言 这段时间学习深度强化学习的总结。 一、强化学习 强化学习是做出最佳决策的科学…

vue-electron 项目创建记录及注意事项

vue-electron 项目创建记录及注意事项 1、使用vue ui或者命令行创建vue项目 2、添加electron插件 3、安装element-plus: npm install --save element-plus 4、修改配置文件如下图: vue.config.js增加配置&#xff1a; pluginOptions:{ electronOutput: { contextIsolation…

centos物理电脑安装过程(2024年1月)

开机时&#xff1a;CtrlAltDelete键重启电脑 重启开始时&#xff1a;按F11&#xff0c;桌面弹出蓝色框&#xff0c;选择第二个SSK SFD142 1.00&#xff0c;回车 选择install centos7安装 选择后弹出选择安装选项&#xff0c;选择语言 连接无线网络 安装设置&#xff0c;选择磁…

gpt批量原创文章生成器,不限制内容的生成器

在当今的数字化时代&#xff0c;内容创作是网站持续发展的重要组成部分。然而&#xff0c;对于拥有大量内容需求的网站来说&#xff0c;手动创作文章可能会耗费大量时间和精力。为了解决这一问题&#xff0c;许多GPT&#xff08;生成式预训练模型&#xff09;文章生成软件应运而…

lv20 QT事件

1 事件模型 2 事件处理 virtual void keyPressEvent(QKeyEvent *event) virtual void keyReleaseEvent(QKeyEvent *event) virtual void mouseDoubleClickEvent(QMouseEvent *event) virtual void mouseMoveEvent(QMouseEvent *event) virtual void mousePressEvent(QMou…

C++笔记(六)--- 静态成员变量/函数(static)

目录 C语言中静态变量 C静态成员变量 C静态成员函数 C语言中静态变量 1.函数内部用static修饰的变量&#xff0c;只能在此函数使用&#xff0c;但所修饰的变量不随函数释放而释放&#xff0c;下次调用时的值仍为上次结束时的值2.static修饰的全局变量只能在其定义的文件使用…

吴恩达《机器学习》学习笔记

本笔记资料来源于 http://www.ai-start.com/ml2014/&#xff0c;该笔记来自于https://blog.csdn.net/dadapongi6/article/details/105668394&#xff0c;看了忘&#xff0c;忘了看&#xff0c;再看一遍。 时间统计&#xff1a;2024.2.29 5个番茄钟&#xff0c;从week1开始&…

智慧城市:打造宜居环境,引领未来可持续发展

随着科技的不断进步与创新&#xff0c;我们的城市正步入一个崭新的时代——智慧城市。智慧城市是指运用信息技术和大数据等现代科技手段&#xff0c;对城市基础设施、公共服务和社会管理进行智能化改造&#xff0c;实现城市各领域的智能化、信息化和高效化。今天&#xff0c;就…

【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;

InnoDB 这是一个MySQL组件&#xff0c;结合了高性能和事务处理能力&#xff0c;以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在&#xff0c;处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…