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;
    }
}

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

(0)

相关推荐

  • vue+springboot前后端分离实现单点登录跨域问题解决方法

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登录咯,至于不知道什么是单点登录的同学,建议去找一下万能的度娘. 刚接到这个需求的时候,老夫心里便不屑的认为:区区登录何足挂齿,但是,开发的过程狠狠的打了我一巴掌(火辣辣的一巴掌)...,所以这次必须得好好记录一下这次教训,以免以后再踩这样的坑. 我面临的第一个问题是跨域,浏览器控制台直接报CORS,

  • SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)

    一.需求 实现用户在浏览器登录后,跳转到其他页面,当用户在其它地方又登录时,前面用户登录的页面退出登录(列如qq挤号那种方式) 二.实现思路 用户在前端填写用户信息登录后,后台接收数据先去数据库进行判断,如果登录成功,创建map集合,以用户id为键,token为值,先通过当前登录用户的id去获取token,如果token存在说明该用户已经登录过,调用redis以token为键删除上个用户的信息,调用方法生成新token,并将token存入map集合,将用户信息存入redis,并将token存入c

  • SpringBoot+Vue开发之Login校验规则、实现登录和重置事件

    一.Login校验规则 1.校验规则写法可参考Element-ui官网文档 https://element.eleme.cn/#/zh-CN/component/form 2.Login.vue页面  <template> <div class="login_container"> <!-- 登录块 --> <div class="login_box"> <!-- 头像 --> <div class=

  • Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码

    本人野生程序员一名,了解了一些微服务架构.前后端分离.SPA的知识后就想试试做点什么东西.之前一直做后端,前端只是有基础知识.之前学习过angularjs,但当时就是一脸懵逼(完全看不懂是啥)就放弃了.最近又学了Vue,这次感觉总算明白了一些,但其中也跳过很多坑(应该还会更多),在这里写下来记录一下吧. 说回主题,之前传统登录认证的方法基本是由服务器端提供一个登录页面,页面中的一个form输入username和password后POST给服务器,服务器将这些信息与DB或Ldap中的用户信息对比,

  • 使用springboot结合vue实现sso单点登录

    本文实例为大家分享了springboot vue实现sso单点登录的具体代码,供大家参考,具体内容如下 项目结构: 开发工具:idea, maven3 静态文件下载地址 1.pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or

  • springboot+vue实现登录功能

    本文实例为大家分享了springboot+vue实现登录功能的具体代码,供大家参考,具体内容如下 目录结构 前端端口:8080 后端端口:8900 login.vue <template> <div class="login_content"> <!-- 登录块 --> <div class="login_box"> <!-- 头像 --> <div class="avatar_box&qu

  • springboot+vue实现登录功能的最新方法整理

    目录 一.介绍 二.环境工具 三.搭建后端spring-boot框架 1.选择Spring Initializr创建新项目 2.CommonResult类 3.IErrorCode 接口 4.ResultCode 枚举 5.User类 6.LoginController类 7.修改DemoApplication 8.更改端口号在application.yml 9.不同端口需要解决跨域问题 四.搭建前端Vue框架 1.创建Vue项目 2.添加项目依赖框架 2.1 使用Vue项目管理器添加依赖 2.

  • springboot+VUE实现登录注册

    本文实例为大家分享了springboot+VUE实现登录注册的具体代码,供大家参考,具体内容如下 一.springBoot 创建springBoot项目 分为三个包,分别为controller,service, dao以及resource目录下的xml文件. UserController.java package springbootmybatis.controller; import org.springframework.web.bind.annotation.CrossOrigin; im

  • vue实现登录功能

    1.背景 完成了登录的表单输入框界面如下: 代码: <!-- 输入框--> <el-form label-width="0px" class="login_form"> <!-- 用户名 --> <el-form-item > <el-input prefix-icon="el-icon-s-custom"></el-input> </el-form-item>

  • springboot+vue实现验证码功能

    本文实例为大家分享了springboot+vue实现验证码功能的具体代码,供大家参考,具体内容如下 1.工具类 直接用不用改 package com.example.demo.Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

  • Springboot整合第三方登录功能的实现示例

    springboot 项目的pom文件引入依赖 <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>{latest-version}</version> </dependency> 代码 登录端点(controller) import com.tarzan.cms.common.prop

  • SpringBoot整合微信登录功能的实现方案

    目录 1. OAuth2解决什么问题? 2. 微信扫描登录 2.1 添加必要的依赖 2.2 application.properties 添加配置 2.3 登录请求 2.4 前端 1. OAuth2解决什么问题? OAuth2:是针对特定问题一种解决方案 可以解决两个问题: a. 开放系统间授权 b. 分布式访问问题 解决方案: a. 方式一:用户名密码复制 b. 通用开发者key c. 办法令牌 2. 微信扫描登录 点击进行注册开发者认证 JWT配置 2.1 添加必要的依赖 <!--httpc

  • vue+springboot实现登录功能

    本文实例为大家分享了vue+springboot实现登录功能的具体代码,供大家参考,具体内容如下 1. 登录功能的实现 实现提交表单的代码如下: async submitForm(user) { this.$refs[user].validate((valid) => { if(valid){ alert("user"); this.$axios.post("http:localhost:8087/user/login?code="+this.code,use

  • vue+springboot+shiro+jwt实现登录功能

    目录 1.导入依赖 2.JWTToken 替换 Shiro 原生 Token 3.JWT token 工具类,提供JWT生成.校验.获取token存储的信息 4.JWTFilter请求拦截 5.登录授权realm 6.shiro配置 7.登录web端 8.异常处理 9.缓存调用登录接口传过来的token 10.请求头设置,带上token 11.生产环境nginx配置 公司开发的系统原先的用户信息是基于shiro session 进行管理,但是session不适用于app端,并且服务器重启后需要重

随机推荐