前端跨域请求get_(单点登录)跨域SSO看这篇文章就够了:前端篇

b52a1d5bb5657d7e82295611c82f9e30.png

前言

前俩篇文章,我们从概念,聊到了服务器中设计的内容。不知道大家是否觉得通俗易懂呢?

接下来的内容则有些偏向前端部分。

正文

三、Cookie传递

3.1、通过URL参数实现跨域信息传递

我们要在A域实现写入token到B域,需要在A域设计一个servlet接收请求,代码:

98dcf5bb6dcf1eea8d0725f9afbcd718.png

由a域发起请求,请求地址:http://www.a.com/tg?from=http://www.b.com/set_cookie, 请求后该Servlet会获取from参数的值并生成token最后让客户端重定向到http://www.b.com/set_cookie?cname=token&cval=123456,然后B域的Servlet("set_cookie")获取Url参数写入Cookie到客户端,代码:

6f8ed337abd3231a0b4b4f95d6edb1c0.png

这时候再查看B域下的Cookie就可以发现(token=123456)已经被写入到浏览器。

3.2、读取其它域的Cookie

利用script标签

利用script标签执行另一个域实现的读取cookie方法,script标签返回结果将是变量定义形式的JS代码,每一个变量表示一个cookie项,这些代码加载后,此页面后续JS代码可以直接在script脚本中读取已定义的变量值,即各cookie值。

bc6afe5548f96f1e11d131b68f77e388.png

HTML页面读取

686e50aa4bba81b29cae10040a23b88c.png

B域的url为/read_cookies的Servlet是如何实现的?

如图,首先我们先在request中获取cookie数组,然后for循环遍历拼接为类似var token='test123';的字符串。最重要的是设置ContentType为application/javascript,代码如下:

0195e7c53ac4032f329ad2c51395558c.png

四:跨域Ajax请求

4.1、CORS简介

出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非使用CORS头文件。

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。

GET跨域请求原理

当客户端浏览器发起一个跨域的HTTP请求,浏览器经过请求响应,如果没有看到Access-Control-Allow-Origin的header头部,会认为你的请求是不合法的。换句话说,我们只要在被请求的服务器上设置这个头部,浏览器就会允许我们进行请求。

解决方法

对于简单的请求,我们直接在服务端 设置就可以了。如图,只要请求的地址是www.a.com就会被浏览器允许跨域。如果想要允许对于多个来源可以用,号进行隔开;如果想要允许所有来源,设置为*就可以,不过建议不要使用,这样会造成安全隐患。

b586d27c830b0e295fa230dfc12ff65f.png

对于复杂的请求,比如POST,或者加入了自定义header头部,上面的方法就不适用了。下面继续看。

CORS流程

请求发起时,浏览器先判断当前是否是跨域的AJAX;

如果是,判断是否是普通类型请求(GET类型,无自定义头数据);

普通请求,直接发起GET到服务端,在响应头中寻找 Access-Contro-Alow- Origin,如果有且允许,处理响应结果;

不是普通请求(非GET类型,或有自定义头), 先 PreFlight(即发起一个 method= OPTIONS)的请求,

要求返回 Access-Control-Allow- Methods和 Access-Control-Allow- Headers, 内容体为空

PreFlight正确执行后, 再发起GET请求, 获得响应结果, 并处理结果.

实现

归根到我们的代码中的实现,只需要在servlet中定义options请求的处理方法即可。如图

f112d07b1fd9c2ecd3eb98d59967c587.png

注意:Access-Control-Allow-Origin是必需的。

尾声

关于单点登录的部分,差不多到此就准备结束了,希望可以给各位看到的小伙伴带来一丝丝的收获。

当然,我也是刚刚了解SSO的内容,所以内容相对比较浅,如果各位看官,有更好的想法,或者更厉害的做法,欢迎评论区留言、讨论。

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

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

相关文章

win10 如何锁定计算机,Win10 1909 专业版怎么锁定计算机屏幕

Win10 1909 专业版怎么锁定计算机屏幕?如果我们需要暂时离开计算机,但不想关机或者注销当前登录,那么为了防止未经授权的使用,我们可以将计算机锁定。在本文中,win10之家小编给大家分享如何自动锁定Windows 10计算机。Win10 1909…

qfile指定从多少行开始_大牛进化路上之Linux基础命令,看看你了解多少?

玩转Linux系统还是要从基础命令开始,基础命令是你大牛发展之路的第一步,扎实的基本命令操作功底才能在工作中游刃有余,下面我们就来看看吧。路径切换说明Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,还可能…

如何开机进入grub界面_如何进入http://192.168.1.1的设置界面 ?

登入192.168.1.1管理界面需要确保前期的硬件连接和已获知路由器的账号密码。接下来详细介绍:1、首先做好准备,检查一下是否已经连接好无线路由器和网线、调制解调器,要确保网络畅通、所有指示灯都正常亮着;2、然后打开手机设置&am…

手机html5雪花飘落,如何使用HTML5canvas实现雪花飘落

这篇文章主要为大家详细介绍了HTML5 canvas实现雪花飘落特效,效果实现引人入胜,很逼真的动画效果,感兴趣的小伙伴们可以参考一下看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的…

灰度调节_网关实现灰度发布

一、背景互联网产品开发有个非常特别的地方,就是不停的升级,升级,再升级。采用敏捷开发的方式,基本上保持每周或者每两周一次的发布频率,系统升级总是伴随着各种风险,新旧版本兼容的风险,用户使…

string类的erase函数属于stl吗_探索STL容器:vector

用了这么久的 vector ,今天终于有时间来看下STL的实现源码了,开心?~最近几个月在刷 leetcode ,用的较多的数据结构就是STL里面的 vector 了,相比较于直接的 array 数组,它具备了灵活地根据需求去分配管理内存&#xf…

泰森怎么会输给道格拉斯_泰森24岁就被击败,如果能像他学习巅峰时期至少能延长三年...

一个职业拳击手的运动生涯长短,除了与自身的打法风格有关外,最重要的就是自律,有很多拳手自身天赋极高,但当他成名之后,随着金钱和荣誉的到来往往无法把持自己,最终走向衰退。我们都知道,拳王迈…

数字加密c语言程序_国外程序员整理的 C++ 资源大全

喜欢的话可以收藏转发加关注摘要:C是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。关于 C 框架、库和资源的一些汇总列表&…

linux操作命令 mongo_Linux安装mongodb总结(仅学习)

原链接:Linux安装mongodb总结 - Lovebugs.cn - 博客园由于自己的博客上线部署时需要用到mongodb来存储图片文件,所以先在本地电脑上安装了mongodb做测试,由于之前没接触过mongodb,所以安装过程中遇到了各种小问题,折腾…

计算机二级必备快捷键知识,计算机二级考试中的一些注意事项️

原标题:计算机二级考试中的一些注意事项️科教武汉 【计算机二级考试中的一些注意事项️】1、要合理安排做题时间可以先通过观察整个题目的题形,判断整个试卷的难点,通过观察题型然后确定自己的应对策。选择题建议用时15-20分钟为好。自己要有…

vba 自定义function返回值_用vba解决excel如何求前面连续为0的个数

领导布置了任务,要求每天统计当月的发展量,并且统计有多少业务员最多连续多少天发展为0的情况,统计的表格是这样的。用几行简单的VBA语言就能解决这个问题首先打开vba编辑窗口,点击开发工具——visual basic(如果没有这个菜单&…

禁用计算机组策略和管理,计算机正在使用时,禁用或关闭组策略刷新 | MOS86

点击此处修复Windows错误并提高系统性能Group Policy(Windows 2000中引入的管理工具)可以确定组织中的用户和计算机的程序,网络资源和操作系统的运行方式。组策略可帮助用户通过在Windows Windows注册表中进行修改来为活动对象添加策略。通常,默认情况下…

怎么捡自己空投_使命召唤手游空投怎么快速找到?使命召唤手游快速找到空投技巧...

使命召唤手游怎么快速寻找空投?空投里面有高级武器跟护甲还有补给品,拿到空投你的装备就会比别人高几个档次。高手拿到空投后吃鸡概率大大提高。下面就为大家详细的介绍一下如何让你快速的找到空投。首先刚开始游戏的时候是不会出现空投的,一…

ubuntu rpm安装_为什么说Ubuntu是一个值得尊敬的Linux发行版

Ubuntu用了好长时间了,最早接触的是RedHat,个人使用体验并不好,当时一直在想,为什么就没有一个更好用的Linux操作系统呢?别万年不变的Windows不行吗?(当时作为一个穷学生党,完全不想…

linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国

众所周知,在 Linux 中一切皆为文件,包括硬盘和显卡等。在 Linux 中导航时,大部分的文件都是普通文件和目录文件。但是也有其他的类型,对应于 5 类不同的作用。因此,理解 Linux 中的文件类型在许多方面都是非常重要的。…

c++ map底层_深入浅出Redisredis底层数据结构(上)

来源:http://t.cn/AigEOwRE相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-value数据库。在《Redis设计与实现》这样描述:Redis 数据…

绝对布局优势_前瞻布局+尖端科技+雄厚资金 恒大解锁造车的“正确姿势”

新能源汽车行业风起云涌,在造车新势力们交相厮杀之时,恒大闪电般完成“新能源车全产业链布局”,占据了绝对先发优势。先人一步驶入快车道的恒大并未止步于此,5月30日,恒大又宣布拿下英国顶级轮毂电机企业protean&#…

山东省计算机考试无法报名,山东省2017年9月全国计算机等级考试报名事项公告...

根据教育部考试中心《关于做好2017年全国计算机等级考试工作的通知》(教试中心函〔2016〕237号)和《关于做好2017年9月全国计算机等级考试报名工作的通知》(鲁招考[2017]67号)要求,现将2017年9月我省全国计算机等级考试报名有关事项公告如下:一、 考试科…

laravel redis_thinkphp+redis实现秒杀,缓存等功能

秒杀是商城常见功能 phpredis是最常见的秒杀功能1,安装redis,根据自己的php版本安装对应的redis扩展首先查看phpinfo();php环境信息2,下载redishttps://windows.php.net/downloads/pecl/snaps/redis/ https://windows.php.net/downloads/pecl…

freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧

点击蓝字 轻松关注CV 工程师你好,以下内容会让你感觉到不适,慎入!在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民…