springsecurity+vue脚手架+redis完成前后端分离登录退出和权限检测的代码--前端

vue前端页面

搭建一个前端工程(使用vue脚手架搭建)

在main.js中修改配置

javascript 复制代码
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App.vue'
import router from './router'
import axios from 'axios'	//导入axios
Vue.use(ElementUI)
Vue.config.productionTip = false
axios.defaults.baseURL = 'http://localhost:8088'	//设置跳转地址前缀
Vue.prototype.$axios = axios	//将axios放入Vue方法中,使用$axios调用
//设置响应拦截器
axios.interceptors.response.use(response => {
if (response.data.code === 200) {
 Vue.prototype.$message.success(response.data.msg);
 return response;
} else {
 Vue.prototype.$message.error(response.data.msg);
 return response;
}
})
//请求拦截器---设置携带token令牌--请求拦截器
axios.interceptors.request.use(config => {
var token = sessionStorage.getItem("token");
if (token) {
 config.headers.token = token;
}
return config;
})
//前置路由守卫 to: 即将要访问的路径 from: 从哪里来 next: 放行函数 前置路由守卫
router.beforeEach((to, from, next) => {
//如果用户访问的是登录页面,直接放行 ===比较值和引用
if (to.path === "/login") {
 //放行
 return next();
}
//获取sessionStorage中保存的token值
const token = window.sessionStorage.getItem("token");
//如果token不存在,强制跳转到登录页面
if (!token) {
 return next("/login");
}
//如果token存在,直接放行
next();
})
new Vue({
router,
render: h => h(App)
}).$mount('#app')

编写router下的index.js的内容

javascript 复制代码
import Vue from 'vue'
import VueRouter from 'vue-router'

// const originalPush = VueRouter.prototype.push
// //修改原型对象中的push方法
// VueRouter.prototype.push = function push(location) {
//   return originalPush.call(this, location).catch(err => err)
// }
Vue.use(VueRouter)

const routes = [
{
 path: '/',
 //重定向到login的路径
 redirect: '/login'
},
{
 path: "/login",
 name: "login",
 component: () => import(/* webpackChunkName: "login" */ '../views/Login.vue')
},
{
 path: "/index",
 component: () => import(/* webpackChunkName: "index" */ '../views/Index.vue')
}
]

const router = new VueRouter({
routes
})

export default router

搭建页面

搭建登录页面

html 复制代码
<template>
<div class="login-container">
 <el-form ref="loginForm" :model="loginForm" :rules="rules" class="login-form" label-width="80px">
   <h2 class="login-title">Login</h2>
   <el-form-item label="Username" prop="username">
     <el-input v-model="loginForm.username" placeholder="Enter your username"></el-input>
   </el-form-item>
   <el-form-item label="Password" prop="password">
     <el-input v-model="loginForm.password" type="password" placeholder="Enter your password"></el-input>
   </el-form-item>
   <el-form-item>
     <el-button type="primary" @click="handleSubmit" :loading="loading">Login</el-button>
   </el-form-item>
 </el-form>
</div>
</template>
<script>
export default {
data() {
 return {
   loginForm: {
     username: '',
     password: ''
   },
   rules: {
     username: [
       { required: true, message: 'Please enter your username', trigger: 'blur' }
     ],
     password: [
       { required: true, message: 'Please enter your password', trigger: 'blur' }
     ]
   },
   loading: false
 };
},
methods: {
 handleSubmit() {
   this.$refs.loginForm.validate(valid => {
     if (valid) {
       this.$axios.post("/login?username=" + this.loginForm.username + "&password=" + this.loginForm.password).then(response => {
         if (response.data.code === 200) {
           sessionStorage.setItem("token", response.data.data);
           this.$router.push("/index");
         }
       })
     }
   });
 }
}
};
</script>
<style scoped>
.login-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f5f7fa;
}

.login-form {
width: 300px;
padding: 20px;
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}

.login-title {
text-align: center;
margin-bottom: 20px;
}
</style>

搭建登陆成功的测试页面

html 复制代码
<template>
<div>
 <button @click="look">查看</button>
 <button @click="Myexport">导出</button>
 <button @click="logout">退出</button>
</div>
</template>
<script>
export default {
methods: {
 logout() {
   this.$axios.post("/logout").then(res => {
     sessionStorage.removeItem("token")
     //跳转到登录页面
     this.$router.push("/login")
   })
 },
 look() {
   this.$axios.get("/user/select").then(res => {
     console.log(res.data)
   })
 },
 Myexport() {
   this.$axios.get("/user/export").then(res => {
     console.log(res.data)
   })
 }
}
}
</script>
相关推荐
辻戋2 小时前
从零实现React Scheduler调度器
前端·react.js·前端框架
徐同保2 小时前
使用yarn@4.6.0装包,项目是react+vite搭建的,项目无法启动,报错:
前端·react.js·前端框架
Qrun3 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp3 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.4 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl6 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫7 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友7 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理9 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻9 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js