Springboot+vue项目,利用Vue路由守卫实现权限控制,实现域名游客登录和对于用户权限的控制

利用Vue路由守卫实现权限控制

在现代Web开发中,确保应用的安全性是至关重要的。Vue.js框架提供了一套强大的路由系统,允许我们通过路由守卫来控制用户的访问权限。以下是如何结合JWT(JSON Web Tokens)拦截器来优化您的Vue路由守卫,以增强权限控制的策略。

对于路由守卫根路由访问的有了更新,需要结合阅读:优化Vue路由守卫以解决访问根路由问题

1. 游客用户的处理

首先,我们需要定义游客用户的处理逻辑。游客用户是没有存储任何用户信息的用户,因此在路由守卫中,我们应该首先识别并处理这类用户,以确保其他路由跳转逻辑不会影响到他们。
通过设置如下路由规则,我们可以确保用户在仅输入域名时(例如 http://localhost:8080/),会被自动重定向到前台首页:

{
  path: '/',
  redirect: '/front/home'
}

这样,即使游客用户没有明确的登录状态,也能被妥善地引导至适当的页面。

2. 系统登录路径的设置

为了进一步细化权限控制,我们需要为不同的系统部分(如前台和后台)设置不同的登录路径。例如,我们可以设置 /manager 作为后台登录路径,而/front作为前台登录路径。通过这样的设置,我们可以规范登录地址,并根据不同的路径前缀来判断用户角色,从而实现基本的权限控制。

{
  path: '/manager',
  // ... 后台相关路由配置
},
{
  path: '/front',
  // ... 前台相关路由配置
}

3. 处理无效或未知的路由

为了确保用户即使输入了无效的URL也能获得良好的体验,而不是遇到Vue的错误提示,我们可以对所有未匹配的路由进行统一处理,将其重定向到一个自定义的404页面。

{
  path: '*',
  redirect: '/404' // 将所有未匹配的路由重定向到404页面
},
{
  path: '/404',
  name: 'NotFound',
  meta: { title: '无法访问' },
  component: () => import(/* webpackChunkName: "not-found" */ '../views/404.vue')
},

  • 404页面处理(403也是类似)
<template>
  <div>
    <div style="height: 100vh; overflow: hidden; display: flex; align-items: center; justify-content: center">
      <div style="font-size: 40px">404 找不到页面 <router-link :to="redirectRoute">返回首页</router-link></div>
    </div>

  </div>
</template>

<script>
export default {
  name: "NotFound",
  data() {
    return {
      user: JSON.parse(localStorage.getItem('xm-user') || '{}'),
    }
  },
  computed: {
    redirectRoute() {
      // 根据用户角色动态选择跳转的页面
      switch (this.user.role) {
        case "ADMIN":
        case "HOMESTAY":
          return "/manager/home"; // 管理员或民宿跳转到后台管理页面
        case "USER":
          return "/front/home"; // 用户跳转到前台首页
        default:
          return "/front/home"; // 其他角色默认跳转到前台首页
      }
    }
  },
  created() {

  },
  methods: {}
}
</script>

<style scoped>

</style>
4. 后端权限控制的强化

尽管前端路由守卫提供了一定程度的权限控制,但仅依赖前端控制是不够安全的。为了确保应用的安全性,我们还应该在后端实施相应的权限控制措施。例如,结合JWT拦截器或Spring Security,我们可以验证用户请求的Token,确保用户具有访问特定资源的权限。
在JWT拦截器方面,B站上的“武哥聊编程”提供了简洁明了的教程,适用于初学者和基本的项目需求。对于有更高权限控制要求的项目,建议深入研究JWT和Spring Security的相关高级特性,以构建更为安全可靠的应用。

5. 示例展示

为了给您一个直观的印象,我将提供一个简化的Vue路由守卫示例,实际项目中您可能需要根据具体需求调整代码。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/front/home' // 将根路径重定向到前台首页
  },

  {
    path: '/manager',
    name: 'Manager',
    component: () => import('../views/Manager.vue'),
    redirect: '/manager/home',  // 重定向到登录
    children: [
      { path: 'home', name: 'Home', meta: { name: '系统首页' }, component: () => import('../views/manager/Home') },
      ]
   },
   
  {
    path: '/front',
    name: 'Front',
    component: () => import('../views/Front.vue'),
    redirect: '/front/home',  // 重定向到主页
    children: [
      { path: 'home', name: 'FrontHome', meta: { name: '系统首页' }, component: () => import('../views/front/Home') },
      ]
   },
   { path: '/login', name: 'Login', meta: { name: '登录' }, component: () => import('../views/Login.vue') },
   { path: '/403', name: 'NotAuth', meta: { name: '无权限访问' }, component: () => import('../views/403.vue') },  
   { path: '*', redirect: '/404' }, // 将所有未匹配的路由重定向到404页面
   { path: '/404', name: 'NotFound', meta: { name: '无法访问' }, component: () => import('../views/404.vue') },
  ]
export default router

// 路由守卫
router.beforeEach((to, from, next) => {
  const user = JSON.parse(localStorage.getItem('xm-user') || '{}');
  if (!user.token && to.path !== '/login') {
    // 如果用户未登录且访问的不是登录页面,则认为是游客,可以放行访问公共页面
    next();
  }else if (to.path.startsWith('/manager') && !user.token) {
    // 如果用户未登录且访问的是后台管理路由,则重定向到登录页面
    next('/login');
  }else if (to.path.startsWith('/manager') && user.role !== 'ADMIN' && user.role !== 'HOMESTAY' ){
    // 如果用户未登录且访问的是前台路由,且角色不是管理员和民宿
    next('/403');
  }else if (to.path.startsWith('/front') && user.role !== 'USER'){
    // 如果用户未登录且访问的是前台路由,且角色不是用户
    next('/403');
  }
  else {
    next(); // 已登录或访问登录页面,则继续正常跳转
  }
});
效果图如下

403无权限

  • 34
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Spring BootVue 结合使用,可以通过 Element UI 来实现动态路由。 具体步骤如下: 1. 在 Spring Boot 中,定义一个 API 接口,用于返回动态路由的配置信息,例如菜单列表、权限信息等。 2. 在 Vue 中,使用 axios 等工具调用该 API 接口获取动态路由的配置信息。 3. 在 Vue 中,使用 vue-router 来实现路由功能。在路由配置中,使用获取到的动态路由信息来动态生成路由。例如,使用菜单列表来生成菜单路由,使用权限信息来控制路由的访问权限等。 4. 在 Vue 中,结合 Element UI 的组件,可以实现一些常见的路由功能,例如面包屑导航、菜单栏等。 综上所述,通过 Spring BootVue 和 Element UI 的结合,可以实现动态路由功能,从而实现更加灵活、可扩展的前端页面管理。 ### 回答2: Spring Boot是一个开发框架,Vue是一个前端框架,Element UI是一个UI组件库,如何实现动态路由呢? 首先,在Spring Boot后端,需要定义一个接口来获取动态路由的数据。可以使用一个数据库表来存储路由信息,如路由路径、组件名称、图标等。然后,通过编写一个控制器类,来处理获取动态路由数据的请求。在该控制器类中,可以调用相应的服务类或数据访问层来获取路由数据,并返回给前端。 接下来,在Vue前端项目中,可以使用Vue Router来实现动态路由。可以在项目的入口文件(如main.js)中,通过发送请求获取动态路由数据。可以使用axios等库来发送请求,获取后端返回的动态路由数据。获取到数据后,可以通过遍历的方式,动态地把路由配置项添加到Vue Router中。 同时,在项目中引入Element UI组件库,可以使用其中的菜单、导航等组件,来展示动态路由。可以根据获取的动态路由数据,来生成菜单和导航栏的数据,并将其展示在页面中。 为了实现动态路由的跳转,可以使用Vue Router中的路由守卫(如beforeEach),在路由跳转之前判断是否有权限访问该路由。可以根据当前用户的权限信息,来判断是否有权限访问该路由。如果没有权限,则可以跳转到其他页面或者显示相应的提示信息。 总结来说,通过在Spring Boot后端定义接口获取动态路由数据,并在Vue前端项目中将其配置到Vue Router中,配合使用Element UI的菜单、导航组件,就可以实现Spring BootVue和Element UI的动态路由。 ### 回答3: 要实现动态路由,我们可以结合使用Spring BootVue和Element UI。 首先,在Spring Boot后端,我们需要建立一个API接口,用于获取动态路由的数据。这个接口可以返回一个JSON对象,包含了多个路由对象的信息,如路由名称、路径、组件等。 接下来,在Vue前端,我们可以使用Element UI的导航菜单组件来实现动态路由。首先,我们需要在Vue项目中安装Element UI,并引入导航菜单组件。然后,在主页面组件中,我们可以通过调用后端的API接口获取动态路由数据,然后根据返回的数据动态生成导航菜单。可以使用Vue Router来管理路由,并使用 `<router-view>` 标签来展示对应的页面组件。 在生成导航菜单时,我们可以使用递归组件来实现无限嵌套的导航菜单结构。每个导航菜单项可以绑定点击事件,当用户点击菜单项时,可以通过Vue Router进行路由跳转,展示对应的页面组件。 为了保证路由权限控制,我们可以在后端API接口中加入用户权限验证的逻辑。在前端,我们可以根据用户的角色或权限信息动态生成导航菜单,只展示用户有权限访问的路由。 总结来说,使用Spring Boot提供API接口获取动态路由数据,然后在Vue前端使用Element UI的导航菜单组件构建动态路由。通过递归组件生成无限嵌套的导航菜单,并通过Vue Router实现路由跳转。同时,可以结合用户权限信息进行路由权限控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值