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) {//存储用户信息到 localStoragelocalStorage.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)//验证tokenlet 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代码特别简单,需要的私信

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能指针(C++)

目录 一、智能指针是什么 二、为什么需要智能指针 三、智能指针的使用和原理 3.1、RALL 3.2 智能指针的原理 3.3、智能指针的分类 3.3.1、auto_ptr 3.3.2、unique_ptr 3.3.3、shared_ptr 3.2.4、weak_ptr 一、智能指针是什么 在c中&#xff0c;动态内存的管理式通过一…

Linux上C语言如何获取线程的返回值

文章目录 一、线程的三个重要的应用程序接口&#xff08;API&#xff09;1.1 线程的创建1.2 线程的退出1.3 线程的等待 二、让线程返回int类型的值二、让线程返回字符串(char*)类型的值 一、线程的三个重要的应用程序接口&#xff08;API&#xff09; 1.1 线程的创建 #includ…

PYCHARM PYSIDE6 QT 打包异常处理 no qt platform plugin could be initialized

安装有PYSIDE6的电脑 异常错误 … no qt platform plugin could be initialized … 变量名&#xff1a;QT_QPA_PLATFORM_PLUGIN_PATH &#xff08;一个字都不能改&#xff01;&#xff01;&#xff09; 自己环境变量值&#xff1a;D:\Users\topma\anaconda3\Lib\site-package…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

Jenkins笔记(一)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;简单了解 二&#xff1a;什么是DevOps 三&#xff1a;安装Jenkins 四&#xff1…

Spring Boot 和 Spring Cloud: 区别与联系

Spring Boot 和 Spring Cloud: 区别与联系 在当今软件开发领域&#xff0c;微服务架构和快速开发成为了主流趋势。Spring框架作为Java生态系统中最流行的开发框架之一&#xff0c;也不例外地推出了Spring Boot和Spring Cloud这两个项目来满足这些需求。本文将详细探讨它们之间…

RK3568平台 EXPORT_SYMBOL的作用

一、EXPORT_SYMBOL 的作用 1.在一个模块中使用 EXPORT_SYMBOL(name)。name 表示函数或者变量等符号&#xff0c;它是对全部内核代码公开的&#xff0c;因此在您的内核模块中可以直接调用 name&#xff0c;即使用 EXPORT_SYMBOL 可以将一个函数以符号的方式导出给其他模块使用。…

MongoDB聚合运算符:$cond

文章目录 语法用法举例 $cond聚合运算符根据布尔表达式的结果返回两个表达式中的一个。 语法 { $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }或&#xff1a; { $cond: [ <boolean-expression>, <true-case>…

(案例贴2) html+css 倒计时器

欢迎大家使用这个计时器噢 老哥直接附代码咯. timer.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

GitLab--Merge Request 权限管理

场景 团队在日常开发工作中需要进行分支管理&#xff0c;通常使用feature分支进行开发&#xff0c;然后依次合并到dev分支、release分支&#xff0c;整个代码合并过程不仅仅是代码合并还需要对代码进行审核&#xff0c;如果在线下进行审核合并&#xff0c;这样操作无法保留痕迹…

【力扣hot100】刷题笔记Day18

前言 晚上巩固一下今天的回溯题&#xff0c;基础不牢地动山摇&#xff0c;po一张代码随想录总结的 组合补充 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution:def combine(self, n: int, k: int) -> List[List[int]]:path []res []def backtrack(star…

go垃圾回收

1 go 垃圾回收变更 Go 语言的垃圾回收器&#xff08;GC&#xff09;自其诞生以来一直在不断演进和优化&#xff0c;以提高性能、减少暂停时间和对程序执行的影响。以下是一些关键的改进和变更点&#xff1a; 并发标记周期&#xff1a; Go 语言从一开始就采用了并发标记&#xf…

日立F-4700FL数据分析实验报告

实验设定 日立F-4700FL为荧光分光光度计,可输出三维光谱扫描结果到计算机。D和L为两种化合物。对4种不同的溶液进行三维光谱扫描,得到的光谱文件如下。 溶质光谱文件无K.txtDD.txtLL.txtD+LH.txt光谱文件(txt)的内容格式如下。 Sample: ... File name: ... Run date: ... …

[C#] 重难点区分[In]、[Out]、in、out、in T、out T

[In] 属性&#xff1a; - [In] 属性用于标识参数是一个输入参数。这意味着参数的值将被传递到方法或函数&#xff0c;但在其执行期间不会被修改。 - 当通过 P/Invoke 或 COM 互操作调用函数时&#xff0c;使用 [In] 属性指示参数的传递方式为输入。 - 示例&#xff1a…

深入探析:云计算与边缘计算在软件开发中的应用与挑战

随着互联网技术的飞速发展&#xff0c;云计算和边缘计算作为两种重要的计算模型&#xff0c;已经成为当今IT领域的热点话题。云计算通过将计算、存储、网络等资源集中在云端&#xff0c;为企业提供弹性、可靠、安全的计算服务。而边缘计算则是将部分计算任务从云端迁移到网络边…

BeautifulSoup解析 HTML标签Tag及属性attrs的常用方法

# 使用 BeautifulSoup 解析 HTML 内容 # BeautifulSoup 对象表示整个解析树或文档&#xff0c;可以用来遍历、搜索和操作文档。# 常用方法&#xff1a; # find(name, attrs, recursive, text, **kwargs)&#xff1a;在文档中查找第一个符合条件的元素&#xff0c;并返回该元素…

Java面试值之集合

集合 1.HashMap底层&#xff1f;扩容机制&#xff1f;1.7-1.8的升级&#xff1f;2.HashMap的长度为什么是2的幂次方&#xff1f;3.HashMap 插入1.7和1.8的区别&#xff1f;4.什么是红黑树&#xff1f;O(logn)5.HashMap为什么会使用红黑树&#xff1f;6.ArrayList底层&#xff1…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之FlowItem容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之FlowItem容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、FlowItem组件 子组件 可以包含子组件。 接口 FlowItem() 使用该接口来…

免费音频剪辑

在数字时代&#xff0c;音频剪辑已成为许多职业和爱好者不可或缺的技能。无论是制作播客、教育视频、还是进行广告宣传&#xff0c;高质量的音频剪辑都能为作品增色不少。今天&#xff0c;我要为大家强烈安利一款免费且功能强大的音频剪辑工具&#xff0c;它绝对是你办公桌上不…

Kotti-基于Python的开源内容管理系统介绍与使用

前言 Kotti是一个基于Python的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;旨在为开发人员提供快速、简单和灵活的方式来构建Web应用。它基于Pyramid框架&#xff0c;使用SQLAlchemy进行数据库管理&#xff0c;支持自定义内容类型和可扩展的插件系统。本文将深入…