Vue3+springboot实现简单登录demo

本文详细指导了如何在已安装Node.js和Yarn的前提下,使用Vue3CLI创建项目,配置路由,实现前端登录功能,并与Springboot后端进行简单的身份验证,包括登录接口和路由守卫的设置。
摘要由CSDN通过智能技术生成

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代码特别简单,需要的私信

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值