umi6.x + react + antd的项目增加403(无权限页面拦截),404,错误处理页面

本文主要是介绍umi6.x + react + antd的项目增加403(无权限页面拦截),404,错误处理页面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 首先在src/pages下创建403,404,ErrorBoundary
403
import { Button, Result } from 'antd';
import { history } from '@umijs/max';const UnAccessible = () => (<Resultstatus="403"title="403"subTitle="抱歉,您无权限访问当前页面"extra={<Button type="primary" onClick={()=>{history.push('/')}}>返回主页</Button>}/>
);
export default UnAccessible;
404
import { Button, Result } from 'antd';
import { history } from '@umijs/max';const NotFound = () => (<Resultstatus="404"title="404"subTitle="抱歉,无法找到你需要的页面"extra={<Button type="primary" onClick={()=>{history.push('/')}}>返回主页</Button>}/>
);
export default NotFound;
ErrorBoundary(错误边界)
import { Result, Button, Tooltip, Typography } from 'antd';
import React from 'react';
// eslint-disable-next-line @typescript-eslint/ban-types
export default class ErrorBoundary extends React.Component {state = { hasError: false, errorInfo: '' };static getDerivedStateFromError(error) {return { hasError: true, errorInfo: error.message };}componentDidCatch(error, errorInfo) {// You can also log the error to an error reporting service// eslint-disable-next-line no-consoleconsole.log(error, errorInfo);}render() {if (this.state.hasError) {// You can render any custom fallback UIreturn (<Resultstatus="500"title={<b style={{fontSize:14}}>抱歉,服务发生错误!请刷新页面</b>}subTitle={<Tooltip title={this.state.errorInfo}><Typography.Paragraph copyable={{text:this.state.errorInfo}}>错误信息</Typography.Paragraph></Tooltip>}extra={<Buttontype="primary"onClick={() => {window.location.reload();}}>刷新页面</Button>}/>);}return this.props.children;}
}
  1. 在app.js配置
    在这里插入图片描述
  2. 对于没有权限的页面,在浏览器输入地址,前端拦截,需要access.js方法拦截,src/access.js
    4中routes.js中配置的access就是作为key(accessObj获取的key要和routes.js中配置的access一致)
/* eslint-disable array-callback-return */
import allData from '../config/routes';//获取权限 key 根据 path 生成
function convertToAccessArray(data) {let accessArray = [];data.map(obj => {if (obj.path && obj.path !== '/' && obj.path !== '/home') {// 去掉路径中的斜杠,并且将首字母大写const access = obj.path.replace(/\//g, '').charAt(0).toUpperCase() + obj.path.replace(/\//g, '').slice(1);accessArray.push(access);}if (obj.routes) {const childAccessArray = convertToAccessArray(obj.routes);accessArray = accessArray.concat(childAccessArray);}});return accessArray;
}export default (initialState) => {const {menuData} = initialState;//后端返回的页面(路由)const AccessList = convertToAccessArray(menuData?.routes??[]);//全部页面const AllList = convertToAccessArray(allData?.routes);//结果对象 accessKey 对应配置的 routes 里面的 access// {//   accessKey: true or false// }const accessObj = {};//添加权限AllList?.map(it=>{accessObj[it] = AccessList.includes(it);})return accessObj;
};

//后端返回的页面(路由)格式类似:

[{"name": "首页","key": "2024042410100000000","path": "/home","icon": null,"routes": []},{"name": "IoT管理","key": "2024042410200000000","path": "/iot","icon": null,"routes": [{"name": "设备管理","key": "2024042410200200000","path": "/iot/device","icon": "icon-shebeiguanli","routes": [{"name": "设备台账","key": "2024042410200201000","path": "/iot/device/account","icon": null,"routes": []}]}]}
]
  1. 如果要对没有权限的页面进行拦截,还需要在routes.js配置access
{path: '/',routes: [{path: '/',redirect: '/home',},{name: '首页',path: '/home',component: './Home',},{name: 'IoT管理',path: '/iot',access: 'Iot',routes: [{name: '设备清单',path: '/iot/devicelist',icon: 'icon-zhiduguifan',component: './Iot/DeviceList',access: 'Iotdevicelist',}],},{path:'/*',name: '404',component: './404',hideInMenu: true,},],
}

这篇关于umi6.x + react + antd的项目增加403(无权限页面拦截),404,错误处理页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975984

相关文章

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的