2026-04-22 23:49:18
JS 实现前端路由拦截的核心是在路由跳转前后进行权限判断,以下提供 5 种常见方案保障前端页面权限:
1. 全局路由守卫(Vue Router / React Router)通过集中式管理权限,在路由跳转前统一校验用户权限。
Vue Router 示例:
router.beforeEach((to, from, next) => { const requiresAuth = to.matched.some(record => record.meta.requiresAuth); const isLoggedIn = localStorage.getItem('token'); if (requiresAuth && !isLoggedIn) { next('/login'); // 重定向到登录页 } else { next(); // 允许跳转 }});React Router 示例(使用 useNavigate 钩子):
import { useNavigate, useLocation } from 'react-router-dom';import { useEffect } from 'react';function AuthGuard({ children, requiredRoles }) { const navigate = useNavigate(); const location = useLocation(); const isLoggedIn = localStorage.getItem('token'); const userRole = localStorage.getItem('role'); useEffect(() => { if (!isLoggedIn) { navigate('/login', { replace: true, state: { from: location } }); } else if (requiredRoles && !requiredRoles.includes(userRole)) { navigate('/unauthorized'); } }, [isLoggedIn, navigate, location, requiredRoles, userRole]); return children;}通过高阶组件包裹需要权限控制的组件,实现更灵活的权限管理。
在服务端进行权限判断,提高安全性但增加实现复杂度。
在路由配置中添加 meta 字段存储权限信息,结合全局守卫进行校验。
根据用户权限动态生成路由表,实现精细化控制。
用户登录后,从服务器获取权限列表。
根据权限列表动态生成路由表。
示例代码(Vue Router):// 假设从服务器获取的权限列表const permissions = ['admin', 'editor'];// 动态生成路由const dynamicRoutes = permissions.includes('admin') ? [ { path: '/admin', component: AdminDashboard, meta: { requiresAuth: true, role: 'admin' }, }, ] : [];// 添加到路由表router.addRoutes(dynamicRoutes);
通过以上方案,可以灵活实现前端路由拦截,保障页面权限安全。