springboot+vue实现登录功能

 更新时间:2021年05月26日 16:41:59   作者:max_yuyu  
这篇文章主要为大家详细介绍了springboot+vue实现登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了springboot+vue实现登录功能的具体代码,供大家参考,具体内容如下

目录结构

前端端口:8080
后端端口:8900

login.vue

<template>
    <div class="login_content">
        <!--  登录块  -->
        <div class="login_box">
            <!-- 头像  -->
            <div class="avatar_box">
                <img src="../assets/logo.png"/>
            </div>
            <!-- 表单区域 -->
            <el-form ref="loginFormRef" :rules="loginRules"  :model="loginForm" class="login_form" label-width="0">
                <!-- 用户名 -->
                <el-form-item prop="username">
                    <el-input v-model="loginForm.username"  prefix-icon="iconfont icon-denglu"></el-input>
                </el-form-item>
                <!-- 密码 -->
                <el-form-item prop="password">
                    <el-input v-model="loginForm.password"  prefix-icon="iconfont icon-mima" type="password"></el-input>
                </el-form-item>
                <!-- 按钮 -->
                <el-form-item class="btns">
                    <el-button type="primary" @click="login">提交</el-button>
                    <el-button type="info" @click="resetLoginFrom">重置</el-button>
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>

<script>
    export default {
        data(){
            return {
                // 表单数据
                loginForm:{
                    username:"admin",
                    password:"123456"
                },
                // 验证对象
                loginRules:{
                    // 校验用户名
                    username:[
                        { required: true, message: '用户名为必填项', trigger: 'blur' },
                        { min: 5, max: 12, message: '长度在 5 到 12 个字符', trigger: 'blur' }
                    ],
                    // 校验密码
                    password:[
                        { required: true, message: '用户密码为必填项', trigger: 'blur' },
                        { min: 6, max: 10, message: '长度在 6 - 10  个字符', trigger: 'blur' }
                    ],
                },
            }
        },
        methods:{
            // 重置表单内容
            resetLoginFrom(){
                this.$refs.loginFormRef.resetFields();
            },
            // 登录方法
            login(){
                // 1.表单验证
                this.$refs.loginFormRef.validate(async valid =>{
                    if(!valid){
                        return ;
                    }
                    // 表单验证成功
                    const {data:res} = await this.$http.post("login",this.loginForm) // 访问后台地址
                    console.log(res)
                    if( res.flag == "ok"){
                        this.$message.success("操作成功");
                        // 跳转到home页面
                        this.$router.push({path:"/home"});
                        // 存储user对象
                        window.sessionStorage.setItem("user",res.user);
                    }else{
                        this.$message.error("操作失败")
                    }
                });
            }
        }
    }
</script>

<style lang="less" scoped>
    .login_content{
        background-color: #2b4b6b;
        height: 100%;
    }
    .login_box{
        height: 300px;
        width: 450px;
        background-color: #fff;
        border-radius: 3px;
        position: absolute;
        left: 50%;
        top: 50%;
        transform:translate(-50%,-50%);
        .avatar_box{
            width: 130px;
            height: 130px;
            border: 1px solid #eee;
            border-radius: 50%;
            padding: 10px;
            box-shadow: 0 0 10px #ddd;
            position: absolute;
            left: 50%;
            transform:translate(-50%,-50%);
            background-color: #0ee;
            img{
                width: 100%;
                height: 100%;
                border-radius: 50%;
                background-color: #0ee;
            }
        }

    }
    .btns{
        display: flex;
        justify-content: flex-end;
    }
    .login_form{
        position: absolute;
        buttom:0%;
        width: 100%;
        padding: 0 10px;
        box-sizing: border-box;
        margin-top: 120px;
    }
</style>

Home.vue

<template>
    <div>
        <el-button type="info" @click="logout">安全退出</el-button>
    </div>
</template>
<script>
    export default {
        methods:{
            logout(){
                // 清楚session
                window.sessionStorage.clear();
                this.$router.push("/login");
            }
        }
    }
</script>
<style scoped></style>

index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
//  引入login组件
import Login from  '../components/login.vue'
import Home from  '../components/Home.vue'


Vue.use(VueRouter)

const routes = [
    {
        path:"/",
        redirect:"/login"
    },
    {
        path:"/login",
        component:Login
    },
    {
        path:"/home",
        component:Home
    },
]

const router = new VueRouter({
  routes
})
// 挂载路由导航守卫
router.beforeEach((to,from,next)=>{
    // to将要访问
    // from 从哪访问
    // next 接着干next(url)重定向url上,继续访问to路径
    if(to.path=='/login') return next();
    // 获取user
    const userFlag = window.sessionStorage.getItem("user");
    // 无值返回登录页
    if(!userFlag) return next('/login');
    // 符合要求,放行
    next();
})
export default router

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
// 添加全局样式
import './assets/css/global.css'
// 引入icfont
import './assets/font/iconfont.css'

// 导入aioxs
import axios from 'axios'
// 挂载axios
Vue.prototype.$http = axios
// 设置访问根路径
axios.defaults.baseURL="http://localhost:9000"


Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

后台实现

@RestController
public class LoginController {

    @Autowired
    UserDao userDao;

    @PostMapping("login")
    public String login(@RequestBody User user){
        String flag = "fail";
        User user1 = userDao.getUserByMessage(user.getUsername(),user.getPassword());
        System.out.println("user"+user1);
        if(user1!=null){
            flag="ok";
        }
        Map<String , Object> map =  new HashMap<>();
        map.put("flag",flag);
        map.put("user",user);
        String  param= JSON.toJSONString(map);
        return param;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java -jar后台启动的四种方式小结

    java -jar后台启动的四种方式小结

    这篇文章主要介绍了java -jar后台启动的四种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringMVC处理器映射器HandlerMapping详解

    SpringMVC处理器映射器HandlerMapping详解

    这篇文章主要介绍了SpringMVC处理器映射器HandlerMapping详解,在SpringMVC中会有很多请求,每个请求都需要一个HandlerAdapter处理,具体接收到一个请求之后使用哪个HandlerAdapter进行处理呢,他们的过程是什么,需要的朋友可以参考下
    2023-09-09
  • Java线程池配置的一些常见误区总结

    Java线程池配置的一些常见误区总结

    这篇文章主要给大家介绍了关于Java线程池配置的一些常见误区,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • RabbitMQ实现消费端限流的步骤

    RabbitMQ实现消费端限流的步骤

    消费者端限流的主要目的是控制消费者每次从 RabbitMQ 中获取的消息数量,从而实现消息处理的流量控制,这篇文章主要介绍了RabbitMQ如何实现消费端限流,需要的朋友可以参考下
    2024-03-03
  • java实现微信企业付款到个人

    java实现微信企业付款到个人

    这篇文章主要为大家详细介绍了java实现微信企业付款到个人功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • java打印指定年月份的日历

    java打印指定年月份的日历

    这篇文章主要为大家详细介绍了java打印指定年、指定月份的日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Java并发编程必备之Future机制

    Java并发编程必备之Future机制

    今天给大家带来的是关于Java并发编程的相关知识,文章围绕着Java Future机制展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java中MyBatis Plus知识点总结

    Java中MyBatis Plus知识点总结

    在本篇文章里小编给大家整理一篇关于Java中MyBatis Plus知识点总结,需要的朋友们参考下。
    2019-10-10
  • IDEA中Web项目控制台乱码的问题及解决方法

    IDEA中Web项目控制台乱码的问题及解决方法

    这篇文章主要介绍了IDEA中Web项目控制台乱码的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • clickhouse 批量插入数据及ClickHouse常用命令详解

    clickhouse 批量插入数据及ClickHouse常用命令详解

    这篇文章主要介绍了clickhouse 批量插入数据及ClickHouse常用命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论