誉天程序员-2301-3-day05

news2024/11/15 11:13:28

文章目录

  • 知识回归
    • 1、单点登录SSO single sign on(面试必考,10分)
    • 2、Vue重大的扩展,Vue框架越来越完善,Vuex状态管理(共享数据)
  • 全局守卫
  • 嵌套路由

知识回归

1、单点登录SSO single sign on(面试必考,10分)

why?(为什么需要它)what?(定义)where?(场景)how?(怎么做)
软件已经发展很久,行业、企业都积累很多软件。
国家电网(陕西省公司,西安供电局)
a.会议管理系统(电影票),java,linux
b.服务器监控系统(CPU、硬盘、内存、网络), c,window
c.供电局费用系统,#c(.net),window
d.农电工管理系统,java,linux
每个系统都需要用户名和密码登录。时间长密码就忘了。md5(‘123’)yS1hl9t~ 疑是银河落九天
我是管理员,4个系统都是我维护。得登录多个系统。
需求:能否一次登录,其他的系统就都能直接访问。面临:开发语言不一致、运行操作系统不一致、代码结构不同、数据库表不同。

很难整合。
新的方式SSO概念。它思想:
它设计已经不围绕用户名(代表登录者身份),找一个中间者(代号,唯一性,不能破解UUID)
把这个代码名字:token(令牌)
每个系统每个用户对应一个token。根据token反查这张表,就可以得到某个具体用户,得到用户信息(名字、男女、登记其他信息。)
每个系统如果共享token,格式:36字符串。解耦。

(what)
SSO(Single Sign-On,单点登录)是一种身份验证和授权机制,允许用户通过一组凭据(如用户名和密码)只需进行一次登录,即可访问多个相关系统或应用程序。

(where)
传统上,用户需要在不同的应用程序和系统中使用不同的凭据登录,这对于用户来说可能是不方便且容易导致密码管理问题。SSO解决了这个问题,提供了一种集中式的身份验证和授权机制,使用户只需登录一次即可访问多个应用程序。

(how)
SSO的工作原理如下:

用户打开一个应用程序或系统,并尝试访问需要身份验证的资源。
应用程序向身份提供者发送身份验证请求,通常是通过跳转到身份提供者的登录页面。
用户提供凭据(如用户名和密码)进行身份验证。
身份提供者验证凭据的有效性,并生成一个身份验证令牌(token)。
身份提供者将身份验证令牌返回给应用程序。(interceptor拦截器,全局安全守卫)
应用程序使用该令牌向身份提供者进行授权请求(header,调用下一个页面,header自动传递),以验证用户是否有权访问特定资源。(根据token获取user信息)
身份提供者对授权请求进行验证,并返回验证结果给应用程序。
应用程序根据验证结果决定是否授权用户访问资源。
通过SSO,用户无需多次输入凭据,只需一次登录即可访问多个应用程序。这提高了用户体验,减少了密码管理问题,并可以提供更强大的身份验证和授权控制。常见的SSO协议包括SAML(Security Assertion Markup Language)和OAuth(Open Authorization)。

现今第三方程序,去申请微信验证,支付宝这种登录的方式都是SSO概念延伸。

2、Vue重大的扩展,Vue框架越来越完善,Vuex状态管理(共享数据)

(why)
在前端中,Vue组件化(ElementPlus、Icon、Home、About、Header、Menu。。。),各个组件共享信息。
如果这个共享信息使用一次,直接传递。带参url?name=‘chen’(不太安全)。
如果共享多个字段,cookie(小量信息共享,不安全)、session(每次请求就是一个会话,小量信息,安全)、header头信息(更小量,不安全)
数据库表(大量数据量,安全,数据库服务器外部是不允许访问,数据库是我们最耗费资源一个服务,IO磁盘,)
共享信息多,好多字段,信息量比较大。

总计:
1)数据量稍大些,但比cookie/session/header数据量要大很多,比数据库小非常多。
2)安全,不能随便把数据开放

Vue为方便开发者,无需数据库这么重配置,性能要高,安全。推出Vuex。

(what)
什么是Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex的核心概念包括以下几个方面:

State(状态):Vuex使用一个单一的状态树来存储应用程序中的所有状态。该状态可以通过存储在store中的数据来访问和修改。

Mutation(突变):Mutation是Vuex中用于修改状态的唯一途径。通过定义mutation来描述数据状态的变化,以保证状态的可追踪性。Mutation必须是同步函数,通过提交一个mutation来修改状态的值。

(how)

// 导入vux的创建实例方法
import { createStore } from 'vuex'

// 创建实例,有两个参数:state所有的对象都存储在这里, mutations操作它的方法
// 在所有的页面共享一个user信息,初始值为空

const store = createStore({
	state: {
		user: {}
	},
	mutations: {
		setUser(state, user){
			state.user = user
		}
	}
})

//导出唯一函数
export default store

全局守卫

第一步:在系统创建permission.js文件
第二步:实现全局守卫,导入router,根据router来创建前置守卫 beforeEach
第三步:打印(全局守卫)目的,了解这个全局守卫何时触发
第四步:加载permission.js文件,修改main.js
第五步:判断
1)获取token,导入auth.js
2)把token设置header信息(完成SSO)
3) a. 不管是否登录,如果访问的是:/login路由(登录页面)放行(转过去)
b. !token(token是否存在,存在代表登录,不存在转向登录页面)
c. 登录了,但是不是login页面,其他页面都直接放行(直接访问 home/about/header/menu)

 // 1. 导入路由
 import router from './router'
 //导入cookie操作工具类
 import { getToken } from './tools/auth.js'
 //导入axios.js,它已经创建一个实例,给实例写个别名axios
 import axios from './axios.js'
 //导入提示框工具类
 import { toast } from './tools/utils.js' 
 
 // 2. 创建全局前置守卫
 // to代表去哪里,from代表从哪里来
 router.beforeEach( (to,from)=>{
	 // 看看这个前置守卫什么时间执行,路由跳转时进行拦截
	 // console.log('全局守卫')
	 
	 //3. 3层判断
	 //a. 判断是否转向登录页面
	 //怎么拿到转向路由
	 if(to.path==='/login') return true
	 
	 //b. 判断是否已经登录
	 // login登录时将后台查询的token写入cookie中,从cookie中获取token
	 const token = getToken()
	 // 写入header,后续页面直接使用
	 axios.defaults.headers.common['token'] = token;
	 
	 //没有登录,转向登录页面。非法用户,直接输入链接
	 if(!token){
		 toast('请您先登录,才可以操作','error')
		 // return to.path = '/login'
		 to('/login')
	 }
	 
	 //c. 上面两步都通过,直接放行(登录的用户直接可以访问其他页面)
	 return true
	 // return false	//下面的代码不执行,界面出不来
 } )
 
 

嵌套路由

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2基础七、refnextTick自定义指令

零、文章目录 Vue2基础七、ref&nextTick&自定义指令 1、ref **作用:**利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例**特点:**查找范围 → 当前组件内 (更精确稳定),用document.querySelect(‘.box’) 获取的是整个页面…

Ubuntu Server版 之 mysql 系列(-),安装、远程连接,mysql 创建用户、授权等

Ubuntu 分 桌面版 和 服务版 桌面版 :有额外的简易界面 服务版:是纯黑框的。没有任何UI界面的可言 安装mysql 安装位置 一般按照的位置存放在 /usr/bin 中 sudo apt-get install mysql-server查看mysql的状态 service mysql status mysql 安全设置…

【C语言课程设计】图书管理系统

引言: 图书管理系统是一个重要的信息管理系统,对于图书馆和书店等机构来说,它能够方便地管理图书的录入、显示、查询、修改和删除等操作。本实验基于C语言开发了一个简单的图书管理系统,通过账户名和密码进行系统访问和权限控制&a…

java数组对象初始化分析

分析代码 public static void main(String[] args) {int a10,b20,c30,d 40,e 50,f60;int aa[] {a,b,c,d,e,f};aa[2] 100;}代码的字节码 图解分析 refs https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-6.html#jvms-6.5.aloadhttps://docs.oracle.com/javase/sp…

WebServer

socket是啥? 网络套接字(Socket)通常被表示为一个类或类似于类的数据结构。网络套接字类封装了网络通信的细节,并提供了用于建立、发送和接收网络数据的方法和属性。常见的成员有源端口,目标端口,源IP,目…

C语言:结构体,联合体

文章目录 一、结构体1.结构体的声明和结构体变量的定义2.结构体变量初始化3. 访问结构体成员4.结构体的内存对齐 二、联合(共用体)总结 一、结构体 结构体是一组元素类型不同的元素的集合 1.结构体的声明和结构体变量的定义 结构体的声明包含三个部分,标记名(tag…

uniapp 微信小程序:页面+组件的生命周期顺序

uniapp 微信小程序&#xff1a;页面组件的生命周期顺序 首页页面父组件子组件完整顺序参考资料 这个uniapp的微信小程序项目使用的是 VUE2 首页 首页只提供了一个跳转按钮。 <template><view><navigator url"/pages/myPage/myPage?namejerry" hov…

Vue中使用Typescript及Typescript基础

准备工作 新建一个基于ts的vue项目 通过官方脚手架构建安装 # 1. 如果没有安装 Vue CLI 就先安装 npm install --global vue/cli最新的Vue CLI工具允许开发者 使用 TypeScript 集成环境 创建新项目。 只需运行vue create my-app 然后选择选项&#xff0c;箭头键选择 Manuall…

国产芯片架构再下一城,ARM或被彻底抛弃,外媒:自作自受

有消息指出特定厂商的5G手机芯片将采用RISC-V架构&#xff0c;这是国产芯片彻底抛弃ARM的标志&#xff0c;毕竟ARM如今对中国芯片越来越不友好&#xff0c;最新款的ARM V9架构就未对多家中国芯片企业授权&#xff0c;抛弃ARM在情理之中。 据悉特定企业的5G手机芯片为RISC-V架构…

Vue项目中强制刷新页面的方法

我们在动态切换组件的过程中&#xff0c;导航栏和底栏不动&#xff0c;动态切换中间区域的情况&#xff0c;在首页可以进行跳转任意组件&#xff0c;在组件与组件之间不能相互跳转&#xff0c;路由发生了变化&#xff0c;但是页面未改变&#xff0c;这时我们就需要强制刷新页面…

窗口透明丨窗口透明度设置控件透明以及窗体透明源码

透明窗口&#xff08;窗口上面文字图片等内容不透明&#xff09;的实现&#xff08;使用SetLayeredWindowAttributes API函数&#xff09; SetLayeredWindowAttributes的实现必须将窗口设置为WS_EX_LAYERED的扩展风格。 然而&#xff0c;只有WS_POPUP窗口才能设置WS_EX_LAYER…

SG函数Nim游戏博弈论

移棋子游戏 题目 https://vjudge.csgrandeur.cn/problem/LibreOJ-10243 给定一个有 N 个节点的有向无环图&#xff0c;图中某些节点上有棋子&#xff0c;两名玩家交替移动棋子。 玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点&#xff0c;无法移动者输掉游戏。 对…

中国撤销3000亿订单,美芯质问还能卖给谁?Intel或暂停工厂

过去两年多来&#xff0c;美国芯片行业的收入大幅减少&#xff0c;然而这还不是低点&#xff0c;近期传出中国或撤销3200亿美元的芯片订单&#xff0c;这更是让美国芯片行业震惊&#xff0c;美芯巨头因此质问美国芯片卖给谁&#xff1f; 中国这几年一直都在稳步减少芯片进口&am…

PHP高校二手物品交易系统【纯干货分享,免费领源码04827】

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 高校二手物品交易系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章…

Java开发基础系列(十四):集合对象(Map)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(十三)&#xff1a;集合对象(Map) ⏱️ 创作时间&…

zlog日志库的使用

代码仓库&#xff1a;https://github.com/HardySimpson/zlog1、zlog 库的默认安装位置是 /usr/local/lib&#xff0c;头文件的安装位置是 /usr/local/include&#xff1b;若需要更改安裝位置&#xff0c;可以修改src/makefile文件下第50行的PREFIX&#xff1f; /usr/local 改为…

当Dubbo遇到高并发:探究流量控制解决方案

系列文章目录 面试Dubbo &#xff0c;却问我和Springcloud有什么区别&#xff1f; 超简单&#xff0c;手把手教你搭建Dubbo工程&#xff08;内附源码&#xff09; 【收藏向】从用法到源码&#xff0c;一篇文章让你精通Dubbo的SPI机制 Dubbo最核心功能——服务暴露的配置、使用…

Doris注意事项,Doris部署在阿里云,写不进去数据

1.Doris官网 Doris官网https://doris.apache.org/ 2.根本原因 本地idea访问FE&#xff0c;FE会返回BE的地址&#xff0c;但是在服务器上通过ip addr查看&#xff0c;发现只有局域网IP&#xff0c;所以FE返回了局域网的IP&#xff0c;导致idea连接不上BE 3.解决办法 重写Ba…

leetcode刷题常用代码片段

Vscode是常用的开发工具&#xff0c;代码插入能够把常见的代码嵌入智能提醒&#xff0c;减轻了很大的工作量&#xff0c;下面是我刷题的配置&#xff0c;直接复制黏贴到自己的cpp.json里就可以用了 左下角&#xff0c;打开设置&#xff0c;选择用户代码片段&#xff0c;选择自…

智慧农业:科技赋能农村发展

智慧农业发展前景灿烂多彩&#xff0c;正为农业带来新的转型升级。随着科技的不断发展&#xff0c;数字化、自动化和智能化技术逐渐渗透进农业领域&#xff0c;为农民提供了更多高效便捷的农业管理方式。智慧农业通过物联网、大数据、人工智能等先进技术&#xff0c;实现对农田…